angleJS Leistungsproblem mit Timer ausgelöst

8

Ich baue eine ziemlich große eckige App, Mein Problem sind die Speicherlecks, die zum Einfrieren der Seite führen. Beim Klicken auf eine Schaltfläche öffnet meine App ein Popup, (mit Hilfe der benutzerdefinierten Direktive) wird der Inhalt dieses Popup dynamisch angehängt und das Popup wird mit $ http von der lokalen Datei aufgerufen. Es funktioniert gut.

Ich habe die chrome-Entwicklerwerkzeuge verwendet, um das Folgende zu erstellen, je nachdem, welche Zeitleiste mir gegeben hat:

Wie Sie sehen, wird der Timer lange vor dem Rendern ausgelöst. und die Zeit davon wird immer mehr, wenn der Benutzer es mehrmals macht (Popup schließt und erneut öffnet). Es sei denn, er geht auf eine andere Seite und kommt zurück oder aktualisiert die Seite. So .... Wie kann ich alle vorherigen Timer zerstören oder was getan werden muss, um den Müll zu sammeln. Oder ist es etwas anderes, was getan werden muss.

    
Ashi 30.06.2015, 15:09
quelle

2 Antworten

1

Sie sollten die von der Schaltfläche aufgerufene Funktion in eine Entprellfunktion einbinden. Siehe Funktion unten. Dadurch wird sichergestellt, dass bei jedem Klicken auf die Schaltfläche die letzte Aktion abgebrochen wird.

In Bezug auf die Leistung stellen Sie sicher, dass der Popup-Inhalt aus dem dom entfernt wird, wenn er vom Benutzer geschlossen wird.

Geliefert von: Ссылка

%Vor%     
Sid 12.06.2016 08:48
quelle
0

Ich würde $ toutout aus empfehlen.

Eine mögliche Lösung für Ihr Memoryleak ist das Abbrechen von Timern, wenn Angular das Element aus dem DOM entfernt, wie in diesem Beispiel gezeigt:

%Vor%

Beispiel von Ben Nadel

    
Kars Barendrecht 12.06.2016 11:55
quelle