SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
JavaScript
Performance
WHO AM I?
• Sebastian Springer
• aus München
• arbeite bei Mayflower
• https://github.com/sspringer82
• @basti_springer
• Consultant,Trainer,Autor
Wie öffnet ihr eure Dev Tools
im Browser?
• Was sind Dev Tools?
• Tastenkombination
• Mausklick (maximal 2)
Was erwartet euch?
Best Practices: Wie kann ich Probleme von vornherein
vermeiden?
Performance Optimierung: Was mache ich, wenn meine
Applikation langsam ist?
Performance
Es gibt nicht die eine JavaScript Performance. Wie sich eine
Applikation benimmt, hängt von zahlreichen Komponenten ab.
Die wichtigsten sind Netzwerk, CPU, Memory und
Rendering.
Performance
verbessern
Branko Spoljar / pixelio.de
Karl-Heinz Laube / pixelio.de
Vorgehensweise
Ein kleiner Ausflug:
Andreas Hermsdorf / pixelio.de
Vorgehensweise
Analyse
Bewertung
Durchführung
Kontrolle
Thorben Wengert / pixelio.de
Analyse
Tim Reckmann / pixelio.de
Developer Tools
Analyse
Meist weiß man, wo die Applikation langsam ist. Ansonsten
werden CPU, Memory, Rendering und Netzwerk überprüft.
Konkrete Messwerte für den späteren Vergleich festhalten.
Profile-Daten können gespeichert, geladen und verglichen
werden.
Bewertung
bschpic / pixelio.de
Bewertung
Meist findet man mehrere Problemstellungen, hat jedoch
nicht genügend Ressourcen. Also Kosten-Nutzen-
Abwägung durchführen.
Cheap Wins zuerst durchführen, gravierende Umbauten mit
wenig Benefits eher nicht durchführen.
Erwartete Verbesserung oder Zielmetrik festhalten.
Bewertung
Maßnahme Aufwand Nutzen
GZIP Compression — +
Concat & Uglify + ++
DOM verkleinern ++ +
DOM Operationen
gruppieren
++ ++
… … …
Durchführung
I-vista / pixelio.de
Durchführung
Anpassung des Quellcodes. Es sollte auf jeden Fall ein
Versionskontrollsystem (git, svn) eingesetzt werden. So
können die Stände verglichen und falls nötig zurückgesetzt
werden.
Tests nicht vergessen!
Kontrolle
Tim Reckmann / pixelio.de
Kontrolle
Die Messwerte der Analyse werden mit den aktuellen Werten
der Applikation verglichen.
Im Anschluss steht die Entscheidung, ob weitere
Verbesserungen erforderlich sind oder ob weitere
Maßnahmen keinen erheblichen Mehrwert bieten.
Performance
Netzwerk CPU
Memory Rendering
Netzwerk
Klicker / pixelio.de
Netzwerk
Anfragen vom Client an den Server über HTTP.
Browser haben nur eine gewisse Anzahl an parallelen
Requests pro Subdomain.
Netzwerk
https://developer.chrome.com/devtools/docs/network
Navigation Timing API: https://developer.mozilla.org/en-US/
docs/Navigation_timing
Netzwerk
Netzwerk
• Stalled/Blocking: Zeit, bevor die Anfrage gesendet wird.
• Proxy Negotiation: Verbinden mit Proxy.
• DNS Lookup: Hostnamen auflösen.
• Initial Connection: TCP Handshake, SSL Negotiation
• SSL: SSL Handshake
• Request Sent: Versenden der Anfrage.
• Waiting (TTFB): Initiale Antwort des Servers.
• Content Download: Herunterladen der Antwort.
Netzwerk
• Anzahl der Requests reduzieren
• Größe der Responses reduzieren
• gzip aktivieren
• DNS Lookups reduzieren (wenige unterschiedliche
Hosts)
• Caching
CPU
Tim Reckmann / pixelio.de
CPU
Prozessor-Ressourcen, die benötigt werden, um den
JavaScript-Quellcode auszuführen.
Die meiste Performance geht aber durch DOM-Operationen
verloren.
CPU
JavaScript Engines weisen zahlreiche Optimierungen auf.
Häufig liegen die Probleme nicht an der Ausführung des
JavaScript-Quellcodes.
Hidden Classes
Optimierung des Browsers, um schneller auf Eigenschaften
von Objekten zuzugreifen.
Maschinencode
Generierung
point.x
# ebx = the point object
cmp [ebx,<hidden class offset>],<cached hidden class>
jne <inline cache miss>
mov eax,[ebx, <cached x offset>]
Gibt es für die Eigenschaft eine Hidden Class, wird diese
verwendet. Ansonsten wird der Cache Miss behandelt. Dann
wird der Wert für die Eigenschaft ausgeliefert.
Garbage Collection
Aufräumen des Speichers. Zwei Speicherbereiche. Mit
unterschiedlichen Algorithmen.
GC benötigt Zeit, hält die Applikation komplett an. Das kann
zu Ruckeln in Applikationen führen.
Timeline
Die Timeline der Chrome Developer Tools gibt einen ersten
Überblick über CPU und Memory Daten und ist ein guter
Ausgangspunkt für die Analyse von Performance-Problemen.
Timeline
CPU
Das CPU-Profile gibt genaueren Aufschluss darüber,
welche Routinen wie viele Ressourcen benötigt haben. Drei
verschiedene Darstellungsarten:
- Chart: Flame Chart
- Heavy (Bottom up): Tablle mit den teuersten Routinen oben
- Tree (Top Down): Baumdarstellung
CPU
CPU - Chart
Eine Funktion hat immer die gleiche Farbe. Erleichtert die
Mustererkennung.
Simulieren Callstacks jeweils mit Verweis auf die
entsprechende Codestelle.
Name: Funktionsname
Self time: Zeit der Funktion selbst
Total time: Zeit der Funktion und aller Unterfunktionen
Aggregated self time: Summe der self time aller Aufrufe
Aggregated total time: Summe der total time aller Aufrufe
CPU
CPU
Call Graphs?
code2flow: experimentelles Tool zur Generierung von Call
Graphs
https://github.com/scottrogowski/code2flow
https://github.com/scottrogowski/code2flow/blob/master/jqueryexample.png
Call Graph für jQuery
Memory
Jan von Bröckel / pixelio.de
Memory
Arbeitsspeicher, der durch die Applikation verbraucht wird.
JavaScript-Objekte, Repräsentationen von DOM-Elementen,
…
Heap Snapshot
Radka Schöne / pixelio.de
Heap Snapshot
• Summary: Zusammenfassung
• Comparison: Vergleich zweier Snapshots
• Containment: Übersicht über die Objektstruktur
• Statistics: Verteilung des Speichers auf
Objekttypen
Verschiedene Views:
Abbild des aktuellen Speichers.
Heap Snapshot
Shallow Size: Speicher, den ein Objekt selbst benötigt.
Retained Size: Speicher, den ein Objekt und die nur von ihm
referenzierten Objekte benötigen.
Distance: Kürzester Weg durch die Memory Hierarchie.
Record Heap
Allocations
Tim Reckmann / pixelio.de
Record Heap Allocations
Wie der Snapshot, nur über Zeit gesehen. Zum Auffinden
von Memory Leaks.
Rendering
Burkard Vogt / pixelio.de
Rendering
Reflow: Neuberechnung der Positionen und Geometrie von
DOM-Elementen.
Blockierende Operation.
Wann passieren Reflows: DOM-Elemente hinzufügen/
entfernen, Klassen anpassen, …
bschpic / pixelio.de
Best
Practices
Best Practices
Was kann man bereits bei der Entwicklung beachten, um
Performance-Probleme zu vermeiden?
Webworkers
Komplexe Berechnungen verzögern die Ausführung und
Blockieren die Applikation.
Mit HTML5 kommen Webworker: Kindprozesse im Browser.
Kommunikation über Nachrichten.
Workerprozess hat Zugriff auf:
navigator, location, xhr, timing,
Kein Zugriff auf:
DOM, window, document, parent
Webworkers
var worker = new Worker('worker.js');



worker.postMessage('Hello Worker');



worker.addEventListener('message', function (data) {

console.log(data);

});
index.js
worker.js
self.addEventListener('message', function (data) {

self.postMessage('Hello Main');

});
Variablen und
Datenstrukturen
Lokale Variablen nutzen, ist schneller als Property-Zugriff
und Array-Zugriff.
Objekte und Properties cachen.
Je tiefer ein Array strukturiert ist, desto langsamer wird der
Zugriff.
Prototypen und Methoden
function Calculator() {

this.add = function () {}

}
function Calculator() {}



Calculator.prototype.add = function () {};
vs
Für jede Instanz wird ein neues Funktionsobjekt erzeugt und
eine neue Closure generiert, was alles Speicherplatz
benötigt.
Prototypen und Werte
function Calculator() {

this.a = 1;

this.b = {};

}
function Calculator() {

this.b = {};

}



Calculator.prototype.a = 1;
vs
Initialisierungslogik muss nicht jedes Mal durchlaufen werden.
Closures
Eine Closure ist eine Funktion und ihr erstellender Kontext.
Benötigt also für die Funktion und den erstellenden Kontext
Speicher.
Quelle für Memoryleaks.
DOM-Elemente zeigen auf Closures und umgekehrt. GC
kann nicht aufräumen.
Sobald eine Callback-Funktion registriert wird, kann sie nicht
durch den GC freigegeben werden. Callbacks sollten
deregistriert werden.
function async() {

var msg = 'Hello World';

setTimeout(function() {

console.log(msg);

}, 1000);

}
Inner Funktion mit Closure
function async() {

setTimeout(function() {

var msg = 'Hello World';

console.log(msg);

}, 1000);

}
Inner Funktion ohne Closure
function sayHello() {

var msg = 'Hello World';

console.log(msg);



}

function async() {

setTimeout(sayHello, 1000);

}
Statische Funktion
Schnell
Langsam
Closures
Zugriff auf Variablen wird langsamer durch zusätzliche
Scopes. Je weiter nach außen, desto langsamer wird es.
function createFunctionWithClosure() {

var b = 'b';

return function () {

var c = 'c';

a;

b;

c;

};

}
createFunctionWithClosure(); c > b > a
Kein with
Die Scope Chain wird modifiziert. Es wird teurer, auf Variablen
zuzugreifen.
var a, x, y;

var r = 10;



with (Math) {

a = PI * r * r;

x = r * cos(PI);

y = r * sin(PI / 2);

}
Browser Memory Leaks
Expando Properties: Beliebige Eigenschaften auf DOM-
Objekten ,die z.B. zirkuläre Referenzen halten können.
Obj A > Obj B > Obj A
Im besten Fall komplett vermeiden.
Arbeit in Schleifen
reduzieren
Jedes Statement in einer Schleife wird pro Schleifendurchlauf
ausgeführt.
Funktionsdefinitionen oder Ähnliches vermeiden.
Möglichst statischen Code außerhalb und wirklich nur das
Nötigste in der Schleife halten.
for (var i = 0; i < arr.length; i++) {}
var length = arr.length;

for (var i = 0; i < length; i++) {}
Rendering
DOM einfach und flach halten.
Möglichst wenige CSS Regeln.
Für komplexes Rendering - position: absolute oder position:
fixed
Einfache CSS Selektoren.
Wenige DOM-Zugriffe
DOM-Zugriffe nur wenn erforderlich.
Zusammenfassen von DOM-Zugriffen.
Elemente wiederverwenden.
Unnötige Variablen
vermeiden
var name = firstname + ' ' + lastname;

console.log(name);
console.log(firstname + ' ' + lastname);
vs.
Jede Variable benötigt Speicherplatz. Der GC bekommt
Arbeit.
JavaScript spät laden
JavaScript im Fuß der Seite laden.
JavaScript möglichst asynchron laden.
Alternative ist <script defer=“true” src=“”></script>
JS wird nach dem Parsen geladen.
<script async src=“”></script>
JS wird parallel zum Parsen geladen.
JavaScript on demand
laden
RequireJS erlaubt nachträgliches Laden von Dateien zur
Laufzeit.
Auch mit Browserify ist Lazy Loading möglich.
Achtung
Keine Premature Optimization - die richtigen
Optimierungen erst, wenn man sie braucht.
Keine Mikrooptimierung
Der Quellcode soll lesbar und wartbar bleiben.
Fragen?
Rainer Sturm / pixelio.de
KONTAKT
Sebastian Springer
sebastian.springer@mayflower.de
Mayflower GmbH
Mannhardtstr. 6
80538 München
Deutschland
@basti_springer
https://github.com/sspringer82

Contenu connexe

Tendances

Tech Talk: Cloud Computing
Tech  Talk: Cloud ComputingTech  Talk: Cloud Computing
Tech Talk: Cloud Computingrjtg
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
2006 - NRW Conf: Asynchronous asp.net
2006 - NRW Conf: Asynchronous asp.net2006 - NRW Conf: Asynchronous asp.net
2006 - NRW Conf: Asynchronous asp.netDaniel Fisher
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebSebastian Springer
 
Reaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und AkkaReaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und AkkaMarkus Klink
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesSascha Hameister
 
Hands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und StolperfallenHands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und Stolperfalleninovex GmbH
 
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM.org
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudWie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudPatric Boscolo
 
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM.org
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenJoomla! User Group Fulda
 
Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Florian Holzhauer
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 

Tendances (20)

Tech Talk: Cloud Computing
Tech  Talk: Cloud ComputingTech  Talk: Cloud Computing
Tech Talk: Cloud Computing
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
2006 - NRW Conf: Asynchronous asp.net
2006 - NRW Conf: Asynchronous asp.net2006 - NRW Conf: Asynchronous asp.net
2006 - NRW Conf: Asynchronous asp.net
 
Node.js
Node.jsNode.js
Node.js
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
Reaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und AkkaReaktive Applikationen mit Scala, Play und Akka
Reaktive Applikationen mit Scala, Play und Akka
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-Features
 
Hands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und StolperfallenHands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und Stolperfallen
 
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure CloudWie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
Wie skaliert man Software as a Service Applikationen in der Windows Azure Cloud
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 
TypeScript
TypeScriptTypeScript
TypeScript
 
node.js
node.jsnode.js
node.js
 
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
 
Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 

Similaire à JavaScript Performance

Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudAOE
 
Skalierung & Performance
Skalierung & PerformanceSkalierung & Performance
Skalierung & Performanceglembotzky
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Martin Kliehm
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Daniel Havlik
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEARCH ONE
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaJohann-Peter Hartmann
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHPThomas Burgard
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroidsBlogwerk AG
 
Cloud Computing am Beispiel dctp.tv
Cloud Computing am Beispiel dctp.tvCloud Computing am Beispiel dctp.tv
Cloud Computing am Beispiel dctp.tvFabian Topfstedt
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusOPEN KNOWLEDGE GmbH
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018Christian Mücke
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)André Krämer
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlMatthias Niehoff
 

Similaire à JavaScript Performance (20)

Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Debugging und Profiling
Debugging und ProfilingDebugging und Profiling
Debugging und Profiling
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Skalierung & Performance
Skalierung & PerformanceSkalierung & Performance
Skalierung & Performance
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)
 
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013XPages: Performance-Optimierung  - Ulrich Krause (eknori) SNoUG 2013
XPages: Performance-Optimierung - Ulrich Krause (eknori) SNoUG 2013
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für China
 
Scaling Rails
Scaling RailsScaling Rails
Scaling Rails
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHP
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
Cloud Computing am Beispiel dctp.tv
Cloud Computing am Beispiel dctp.tvCloud Computing am Beispiel dctp.tv
Cloud Computing am Beispiel dctp.tv
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 

Plus de Sebastian Springer

Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsSebastian Springer
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsSebastian Springer
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceSebastian Springer
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebSebastian Springer
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
 
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
10 Dinge die ich an dir hasse - Stolpersteine in der WebentwicklungSebastian Springer
 
JavaScript Qualitätssicherung
JavaScript QualitätssicherungJavaScript Qualitätssicherung
JavaScript QualitätssicherungSebastian Springer
 

Plus de Sebastian Springer (20)

Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Angular2
Angular2Angular2
Angular2
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
Typescript
TypescriptTypescript
Typescript
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Lean Startup mit JavaScript
Lean Startup mit JavaScriptLean Startup mit JavaScript
Lean Startup mit JavaScript
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
Node.js für Webapplikationen
Node.js für WebapplikationenNode.js für Webapplikationen
Node.js für Webapplikationen
 
JavaScript Architektur
JavaScript ArchitekturJavaScript Architektur
JavaScript Architektur
 
Angular translate
Angular translateAngular translate
Angular translate
 
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
 
Error handling in JavaScript
Error handling in JavaScriptError handling in JavaScript
Error handling in JavaScript
 
JavaScript Architektur
JavaScript ArchitekturJavaScript Architektur
JavaScript Architektur
 
Java scriptarchitektur
Java scriptarchitekturJava scriptarchitektur
Java scriptarchitektur
 
JavaScript Qualitätssicherung
JavaScript QualitätssicherungJavaScript Qualitätssicherung
JavaScript Qualitätssicherung
 

JavaScript Performance