angular.js performance-Probleme
Batarang auf die Registerkarte Leistung zeigt, dass auf der app root-Winkel ist die aufrufende Funktion, die so aussieht:
function (a){var e,f,i=a.$eval(h),m=hc(i,
.
Laut batarang es ist quälend langsam und wenn ich etwas mehr Zeilen, die auf der app, es verlangsamt die app und stürzt ab, Firefox (obwohl Chrome noch verarbeitet). Also, was zum Teufel ist es das tun? Wie kann ich das beheben?
- Haben Sie versucht, mit dem unminified-version, damit Sie sehen können weitere Informationen?
- es ruft ngRepeatWatch
- es beginnt, indem Sie 80% der Zeit, und langsam abbaut, aber geht nie nach unten zu weniger als 50%
- Wie viele Artikel werden Sie wiederholt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas zu berücksichtigen beim Bau einer Eckigen Anwendung, wo Sie sind dynamisch erweitert den Inhalt eines ngRepeat. Jeder ngRepeat, die Sie einrichten, richtet ein Uhr. Jeder {{binding}} oder ngModel Sie tun innen, die sich wiederholen, baut eine Uhr, und so weiter. Jeder der diese erstellt Funktion und Objekt-Instanzen und auch verarbeitet werden muss auf jeden $digest. Also, wenn Ihr läuft in performance-Probleme, müssen Sie möglicherweise implementieren Sie eine benutzerdefinierte Richtlinie, die schreibt Ihre Daten, ohne diese überflüssige Uhren, Sie sind also ein wenig schneller. Dass meine 2 cents.
ngrepeat
's ansehen, so würde das Kontrollkästchen änderungen jedes definierte Anzahl von Sekunden, ohne die Einführung von benutzerdefinierten Richtlinie?link
Funktion, dynamisch erstellt aus DOM-Elementen basiert auf dem Modell. Ähnlich zu dem, was Sie tun würde, in einem einfachen JQuery-Anwendung. Sie würden dann eingerichtet, Krawatten, was auch immer Sie tun mussten, aktualisieren Sie Ihr Modell aus der DOM und das DOM Modell. Wahrscheinlich mit einem einzigen $sehen, sondern als n-$Uhren. ... wenn das Sinn macht.So stolperte ich über diese Monate nachdem die Frage gestellt als ich mit, was ich denke, ist ein ähnliches problem. Lassen Sie mich beschreiben, mein Problem und meine Lösung (das bezieht sich nicht auf eine Richtlinie), und Sie können sehen, wenn es gilt, zu verkaufen.
Ich war der Bau einer Tabelle. Zuerst würde ich verlangen das info sagt mir, was Zeilen in der Tabelle wurden, dann würde ich mir weitere Infos anfordern, erfüllt in den Zellen der Tabelle. Also würde ich die erste Anfrage und fügen Sie alle Zeilen der Tabelle, dann fordern Sie die Zelle Daten. Ich würde das abrufen der Zelle, die Daten von der Zeile, aber in einer großen Tabelle dies würde immer noch eine Menge Anfragen. Wenn ich die Zelle Daten zurück für die Zeile, ich würde füllen Sie es in.
Dies ein wirklich Cooler Effekt, alle Zellen mit Spinnen-Symbole auf Daten wartet. ABER, es machte es wirklich langsam. In Chrome, das war in Ordnung, die browser verlangsamen würde, aber es würde weiterhin funktionieren. Aber im FF, wäre es, dass lästige "Skript beschäftigt oder reagiert nicht" messsage. Wenn Sie Weiter angeklickt, es würde funktionieren, aber wenn Sie auf "Abbrechen" würden Sie stoppen Sie das Skript, und nichts würde funktionieren.
So, hier ist die Lösung, die ich kam mit. Keine Richtlinie erforderlich. Alles, was ich Tat, war die Erstellung der Daten für jede Zeile vollständig, und nur dann hinzufügen der Zeile in die variable verwendet, die durch ng-repeat. Auf diese Weise ist es VIEL schneller. Die Zeilen füllen, wie es ruft alle Daten zurück, die $watch ' s sind noch da, aber Sie sind nicht das auslösen einer Tonne von Ihnen auf einmal und man kann immer noch haben Sie in der Lage, die Daten nachträglich ändern (in meiner Tabelle, die Sie Bearbeiten können, jeder Zelle der Tabelle so in der Lage, ändern Sie die Daten später einfach wichtig war).
Hoffe, das jemand hilft.