Bei einem kürzlich von mir besuchten UI / UX-MeetUp gab ich Feedback zu einer Website, auf der Javascript (jQuery) für die Interaktion und Benutzeroberfläche verwendet wurde - es waren ziemlich einfache Animationen und Manipulationen, aber die Leistung auf einem anständigen Computer war schrecklich.
Es erinnerte mich tatsächlich an viele Websites / Programme, die ich mit demselben Problem gesehen habe, bei denen bestimmte Aktionen die Leistung absolut zerstören. Dies geschieht hauptsächlich in Situationen (oder zumindest in Situationen, in denen Javascript fast als Flash-Ersatz dient). Dies steht in krassem Gegensatz zu einigen der von mir verwendeten Webapps, die weitaus mehr Javascript und Funktionalität bieten, aber sehr reibungslos funktionieren (COGNOS von IBM ist eines, an das ich auf Anhieb denken kann).
Ich würde gerne einige der häufigsten Probleme kennen, die bei der Entwicklung von JS nicht berücksichtigt werden und die Leistung der Website beeinträchtigen.
Antworten:
Ein häufiger Leistungskiller ruft
.length
eine HTMLCollection innerhalb einerfor
Schleife auf:Dieses Anti-Muster bewirkt, dass die Größe der Sammlung bei jedem Durchlauf durch die Schleife berechnet wird. Der bessere Ansatz besteht darin, die Länge außerhalb der Schleife zu berechnen:
quelle
document.getElementsByTagName
. Die Funktion gibt ein Live zurück,nodeList
das bei jedem.length
Zugriff auf die Eigenschaft die Länge neu berechnet .Nein, das Problem kommt nicht von JS, das als Flash-Ersatz verwendet wird. Wenn Sie davon nicht überzeugt sind, dokumentieren Sie sich über Actionscript: Es ist sehr nah an JS.
Als Performance-Killer gibt es mehrere schlechte Praktiken:
quelle
Das größte Problem bei der Leistung ist die Verwendung von Abstraktionen auf hoher Ebene (wie jQuery), ohne das zugrunde liegende DOM-Modell und das CSS3-Animationsmodell (oder Canvas oder SVG) zu verstehen.
Wenn Sie nicht wissen , wie es ohne die Abstraktionen zu tun , dann haben Sie absolute Null Wissen, was Techniken sind schnell oder langsam.
Lerne JavaScript, lerne das DOM. Sobald Sie diese beiden kennen und wissen, was Ihre Abstraktionen unter der Haube tun, können Sie sie effizient nutzen. Natürlich ist die Abstraktion die meiste Zeit zu langsam und wird einfach manuell ohne Bibliothek ausgeführt.
quelle
Das Schöne und der Nachteil von Javascript ist, dass es äußerst flexibel ist. Davon abgesehen können Sie tatsächlich Dinge tun, die Sie in vielen Fällen wahrscheinlich nicht tun sollten.
Aufgrund der Codeüberprüfungen, an denen ich beteiligt war, beziehen sich die Hauptprobleme in der Regel auf das CSS-Rendering. Für neuere JS-Entwickler sehen wir tendenziell viel zu viele Variablen, die im globalen Bereich verwendet werden.
Außerdem können unsachgemäße Schließungen häufig zu Speicherlecks führen. Die meisten modernen Javascript-Frameworks verhindern jedoch solche Probleme, solange Ihr Code dem Framework folgt.
quelle
Hier ist ein kurzer Link, den ich vor ungefähr einem Jahr über das Schreiben eines besseren Abfragecodes gefunden habe: http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instant-increase-your-jquery-performance /.
Eine Sache, die ich gerade in einem Mitarbeitercode gefunden habe, der die Leistung beeinträchtigte, war das Zwischenspeichern von Daten, die nicht zwischengespeichert werden mussten.
Beispiel:
DataTables ist ein jQuery-Plug-In, mit dem wir schöne Raster erstellen. Wie auch immer, die Tabelle enthielt fast 5.000 Zeilen. Durch Anwenden des DataTables-Plug-Ins und anschließendes Speichern in der Tabellenvariablen warnten sowohl FireFox als auch IE, dass ein Skript zu lange dauerte. Moral der Geschichte, zwischenspeichern Sie die Daten nur, wenn Sie müssen.
quelle
Soweit ich gehört habe, sind
for
Loops rechnerisch schneller als jQuerys$.each()
.quelle