JavaScript Performance
By Markus Nix
()
About this ebook
Die Explosion an Javascript-Bibliotheken in den letzten Jahren erzeugte eine breite Akzeptanz selbst unter den Entwicklern, die der Sprache zuvor wenig mehr als einfache Formvalidierungen zugetraut hatten. Doch die "Bequemlichkeitsbibliotheken" haben auch verhindert, dass sich viele Entwickler eingehender mit der Sprache beschäftigten. JavaScript ist eine interpretierte Sprache - schlechter Code erzeugt also fast zwangsläufig eine langsame Anwendung. Und damit unzufriedene Nutzer. Wenn Sie jemals jQuery's "each"-Funktion verwendet haben, um über ein kurzes Array zu iterieren, dann ist "JavaScript Performance" das richtige Buch für Sie!
Angefangen von grundlegenden Betrachtungen der Sprache - Variablen, Operatoren, Typen, Schleifen - bietet es eine Fülle von Lösungen für gängige Problemstellungen wie der schnellen Verkettung von Strings oder effektiver DOM-Manipulation. Darauf aufbauend liefert "JavaScript Performance" zahlreiche Hinweise zum Umgang mit bekannten Bibliotheken wie jQuery, Prototype oder Node.JS sowie Neuerungen in der HTML5-Spezifikation. Ergänzende Links zu Performance-Tests belegen für die meisten Beispiele eindrücklich, wie mit einfachen Veränderungen imposante Verbesserungen erzielt werden können.
Related to JavaScript Performance
Related ebooks
HTML5, JavaScript und jQuery: Der Crashkurs für Softwareentwickler Rating: 2 out of 5 stars2/5Mobile Web-Apps mit JavaScript: Leitfaden für die professionelle Entwicklung Rating: 0 out of 5 stars0 ratingsNext Level JavaScript: Schlagworte Rating: 0 out of 5 stars0 ratingsDurchstarten mit React: Web-Apps einfach und modular entwickeln Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsJavaScript und Ajax: Das Praxisbuch für Web-Entwickler Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsCouchDB mit PHP Rating: 0 out of 5 stars0 ratingsKompaktkurs C# 5.0 Rating: 0 out of 5 stars0 ratingsWindows 10 Update - Oktober 2018: Alles zum neuen Herbst-Update Rating: 0 out of 5 stars0 ratingsF#: Einstieg und praktische Anwendung Rating: 0 out of 5 stars0 ratingsModerne Onlineshops: Case Study: Goodgame Studios Rating: 0 out of 5 stars0 ratingsMit Scratch 3 programmieren lernen Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsImplementierung von Lizenzmodellen in .NET Rating: 0 out of 5 stars0 ratingsF#: Ein praktischer Einstieg Rating: 0 out of 5 stars0 ratingsPrinzipien des Softwaredesigns: Entwurfsstrategien für komplexe Systeme Rating: 0 out of 5 stars0 ratingsSoftware Development Trends: Wegweisende Beiträge für eine neue IT: Wegweisende Beiträge für eine neue IT Rating: 0 out of 5 stars0 ratingsWebanwendungen erstellen mit Vue.js: MVVM-Muster für konventionelle und Single-Page-Webseiten Rating: 0 out of 5 stars0 ratingsAndroid Schnelleinstieg Rating: 0 out of 5 stars0 ratingsVerteilte Systeme mit Kubernetes entwerfen: Patterns und Prinzipien für skalierbare und zuverlässige Services Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsPraxiswissen TYPO3 CMS 9 LTS Rating: 0 out of 5 stars0 ratingsZukunftssichere Architektur: So bauen Sie monolithische Anwendungen zu komponentenorientierten um Rating: 0 out of 5 stars0 ratingsJavaScript für Enterprise-Entwickler: Professionell programmieren im Browser und auf dem Server Rating: 0 out of 5 stars0 ratingsDas Microservices-Praxisbuch: Grundlagen, Konzepte und Rezepte Rating: 0 out of 5 stars0 ratingsREST und HTTP: Entwicklung und Integration nach dem Architekturstil des Web Rating: 5 out of 5 stars5/5Programmieren in TypeScript: Skalierbare JavaScript-Applikationen entwickeln Rating: 0 out of 5 stars0 ratings
Programming For You
JavaScript kurz & gut Rating: 3 out of 5 stars3/5Algorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsProgrammieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5SQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Weniger schlecht programmieren Rating: 4 out of 5 stars4/5New Game Plus: Perspektiven der Game Studies. Genres - Künste - Diskurse (Bild und Bit. Studien zur digitalen Medienkultur) Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsPython kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Linux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsGit kurz & gut Rating: 0 out of 5 stars0 ratingsMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Eigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5Linux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsMicrocontroller für das IoT Rating: 0 out of 5 stars0 ratingsDie ultimative FRITZ!Box Bibel - Das Praxisbuch 2. aktualisierte Auflage - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5Bash kurz & gut Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsPython lernen – kurz & gut Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsPython-Grundlagen Rating: 0 out of 5 stars0 ratings
Reviews for JavaScript Performance
0 ratings0 reviews
Book preview
JavaScript Performance - Markus Nix
Impressum
Markus Nix
JavaScript Performance
schnell+kompakt
ISBN: 978-3-86802-611-5
© 2012 entwickler.press
ein Imprint der Software & Support Media GmbH
http://www.entwickler-press.de
http://www.software-support.biz
Ihr Kontakt zum Verlag und Lektorat: lektorat@entwickler-press.de
Bibliografische Information Der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.
Lektorat: Sebastian Burkart
Korrektorat: Katharina Klassen, Frauke Pesch
Satz: Laura Acker
Umschlaggestaltung: Maria Rudi
Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks, kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.
Speedy Gonzales in tiefer Ehrfurcht gewidmet
Vorwort
JavaScript eilt der Ruf voraus, die „am meisten missverstandene Programmiersprache der Welt" zu sein – glaubt man Douglas Crockford. Häufig als Spielzeug verspottet, liegen doch hinter der trügerischen Einfachheit mächtige Sprachfeatures. Das Jahr 2005 hat die Geburt einer Reihe mächtiger JavaScript-Bibliotheken gesehen, allen voran jQuery und Prototype – elaborierte Bibliotheken, die eindrücklich vor Augen geführt haben, dass eine tiefere Kenntnis von JavaScript für jeden ambitionierten Webentwickler Pflicht ist. Doch dieser große Entwicklungssprung hatte auch Schattenseiten: er hat viele Entwickler davon abgehalten, ein tieferes Verständnis von JavaScript zu entwickeln. Wenn Sie jemals jQuerys each-Funktion verwendet haben, um über ein kurzes Array zu iterieren, dann haben Sie eine ungefähre Ahnung, was ich meine. Nun kann man es diesen populären Bibliotheken schwerlich ankreiden, dass sie es uns so einfach machen. Aber man kann sich vergegenwärtigen, dass man für diese Bequemlichkeit einen Preis bezahlen muss. Und die Währung heißt Geschwindigkeit.
Im Gegensatz zu den meisten Programmiersprachen kennt JavaScript kein Eingabe-/Ausgabe-Konzept. Die Stärken von JavaScript liegen darin, als interpretierte Sprache innerhalb eines Hosts zu existieren. Und es obliegt eben jenem Host Environment (typischerweise einem Browser), entsprechende Mechanismen bereitzustellen, um mit der Außenwelt in Kontakt zu treten. JavaScript-Interpreter stecken in vielen bekannten Programmen, z.B. Adobe Acrobat, Photoshop oder Apple Dashboard Widgets, und sind auf Smartphones ebenso zu Hause wie auf Webservern, Node.js sei Dank. Plattformen wie Adobe Air oder Titanium Appcelerator bauen gleich gänzlich auf JavaScript auf.
JavaScript ist eine objektorientierte dynamische Sprache mit Typen und Operatoren, einer Handvoll nativer Objekte und Methoden. In JavaScript ist jeder Datentyp eigentlich ein Objekt. Ein grundlegender Unterschied zu anderen objektorientierten Sprachen besteht darin, dass JavaScript kein Klassenkonzept kennt, aber einen vergleichbaren Mechanismus auf der Grundlage von Objektprototypen, der es z.B. gestattet, ein Objekt zur Laufzeit zu erweitern. Ein weiterer irritierender Unterschied: Auch Funktionen sind in JavaScript letztlich Objekte, die es gestatten, ausführbaren Code an andere Objekte weiterzureichen. Ich vermute, dass Sie sich über diese grundlegenden Unterschiede im Klaren sind. Denn dies ist keine Einführung, es ist vielmehr eine Sammlung von Performancetipps und Best Practices, gesammelt über einen Zeitraum von fast fünfzehn Jahren.
Auch wenn die Sprache selbst in der letzten Dekade keine wirklich grundlegenden Veränderungen erfahren hat, so ist doch unter Entwicklern eine ständige Evolution im Gange. Ein permanentes Streben nach größtmöglicher Eleganz und Effizienz, ein beharrliches Ringen um den besten Lösungsweg. Im Grunde programmieren wir seit geraumer Zeit schwergewichtige Applikationen mit eben jener Sprache, mit der wir zuvor lediglich lustige Texteffekte in die Statusleiste des Browsers gezaubert haben. Und mit diesem Hintergrund neue Herausforderungen zu meistern ist, als würde man mit einem Dacia an einem Formel-1-Rennen teilnehmen oder als wäre man in der Vergangenheit mit einem Formel-1-Wagen gefahren, allerdings nur im ersten Gang. Erst das gesteigerte Interesse vieler Entwickler an JavaScript führt nun dazu, dass wir zunehmend das Potenzial von JavaScript ausloten. Nennen wir es Hype oder Web 2.0 – erst diese künstlichen Meilensteine im diffusen Feld der Webentwicklung erzeugten breite Aufmerksamkeit für eine Sprache, die auch schon vor zehn Jahren ähnliche Mechanismen bereitgestellt hat. Kennen Sie noch DHTML? Oder Netscapes layer?
Um im Bild zu bleiben: Mit JavaScript konnte man schon immer 320 km/h fahren. Nur, dass es jetzt jeder weiß. Was nicht zwangsläufig bedeutet, dass wir deshalb alle gleich erstklassige Formel-1-Piloten wären. Schnelle Prozessoren gaukeln uns vor, dass wir schnelle Programme hätten. Das mag bei kleinen Programmen funktionieren, mit größeren fliegen wir aus der Kurve. Wir brauchen Training und ein tieferes Verständnis der Sprache, um skalierbare Applikationen programmieren zu können. Performance war vernachlässigbar, als es nur darum ging, skriptgesteuert die Hintergrundfarbe eines HTML-Dokuments zu verändern. Jetzt – speziell im Hinblick auf DOM-Manipulationen und die neuen Möglichkeiten von HTML5 – ist die Frage nach effizientem Code nicht länger unter den Teppich zu kehren. Nicht eval is evil, sondern Unkenntnis! Snappy, not sloppy – das ist die Attitüde, die moderne Echzeitapplikationen überhaupt erst möglich macht.
Bestimmte Best Practices zu ignorieren bedeutet, dass der Browser unnötige Arbeit leisten muss. Dabei darf es uns nicht genügen, einfach nur zu sagen, dass „X schneller ist als Y", es bedarf eines Belegs. Wo immer sinnvoll, wird ein Aspekt der Performanceoptimierung durch einem Link zu einem jsPerf-Testcase (http://jsperf.com/) ergänzt. Diese hilfreiche Website gestattet, die Performance kleiner Code-Snippets zu vergleichen und diese Tests der Allgemeinheit zur Verfügung zu stellen. Und die „Allgemeinheit" reichert die Informationen durch die Messergebnisse des spezifischen Browsers an, in dem der Testcase lief, z.B. hier:
http:// jsperf.com/jquery-tree-traversing. jsPerf-Tests werden wiederholt ausgeführt, und zwar mindestens so oft wie es nötig ist, um ein aussagekräftiges Ergebnis abzuleiten. Je mehr Operationen pro Sekunde, desto besser.
Es geht natürlich auch unkomplizierter. Die Firefox-Erweiterung Firebug ist z.B. eine gute Wahl, um sich rasch Klarheit über vermeintliche Flaschenhälse zu verschaffen. Nicht unbedingt nach den Kriterien absoluter Exaktheit, aber in jedem Fall zielführend. Hier ein kurzes Beispiel zum Verständnis des Timer-Features:
function trackSomething() {
console.time(„MyTimer");
for (var x = 5000; x > 0; x--) {
// do something
}
console.timeEnd(„MyTimer");
};
Und nicht zu vergessen die interaktive Konsole, vor allem bei der Entwicklung effizienter Selektoren. Oder JSLitmus (http://www.broofa.com/Tools/JSLitmus/). Also, keine Entschuldigungen!
Performanceoptimierung ist das Herz fast aller programmiertechnischen Bestrebungen, genauer: die Beugung gegenwärtiger technischer Beschränkungen. Das Biest ist gerissen genug, von Zeit zu Zeit seinen Namen zu ändern, aber es ist stets allgegenwärtig. Einst hieß es Prozessorgeschwindigkeit, dann Bandbreitenlimitierung, gegenwärtig Hardwarebeschleunigung für mobile Endgeräte. Oder Speicherplatz oder... Sie sind ihm sicher schon begegnet! Das ist nicht weiter schlimm, solange Sie Beschränkungen als den geheimen Ursprung von Kreativität betrachten. Es sind eben diese Beschränkungen, die einen Schlüsselfaktor für die rasante Entwicklung im Web Development darstellen. Haben Sie vor fünf Jahren über die Geschwindigkeit Ihres Handyprozessors nachgedacht? Ich nicht!
Die JavaScript-Welt fragmentarisiert sich zunehmend. An die Stelle monolithischer Bibliotheken treten zunehmend kleinere, leichtgewichtigere Bibliotheken, deren geglückte Kombination auf die Qualität Ihrer Arbeit maßgeblichen Einfluss hat. Zeit, den Blick unter die Haube zu wagen. Zeit, die richtigen Fragen zu stellen. Zeit, den eigenen Code zu optimieren. Und auf keinen Fall wahllos, sondern dort, wo mit kleinen Veränderungen große Verbesserungen erreicht werden können. Don't tune for quirks. Vermeiden Sie Verbesserungen mit kurzer Halbwertszeit, denn die Browserwelt ist stetigem Wandel unterworfen.
Gerade die Beschränkungen mobiler Plattformen mit geringerer Ausführungsgeschwindigkeit und höherer Latenz zwingen uns dazu, unsere Codebasis schmal und leichtgewichtig zu gestalten, gerade so wie vor ein paar Jahren, als Bandbreite der alles determinierende Faktor