2017-02-02 3 views
0

Unsere Web-App erstellt und zerstört regelmäßig Editor Editors. In Chrome tritt ein Speicherverlust auf. Nach dem Profiling scheinen die Verweise auf ckeditor aufgrund eines Aufrufs von ckeditor.tools.bind angehalten zu werden. Sollte editor.destroy diese Bindungen entfernen? Wenn nicht, gibt es eine Möglichkeit, sie selbst zu entfernen?Unbinding ckeditor Ereignisse hinzugefügt mit ckeditor.tools.bind

Beispiel-Code, der das Problem (Auszeiten hinzugefügt, um zu sehen, ob Timing das Problem ist) zeigt

var editor; 

    function replaceDiv() { 
     if (editor) { 
      editor.destroy(); 
     } 
     setTimeout(function() { 
      editor = CKEDITOR.replace(document.getElementById("editable2")); 
      setTimeout(function() { replaceDiv()}, 1000); 
     }, 1000); 
    } 
+0

In der Theorie sollte es, aber wenn ein Plugin Ereignisse zu einem globalen anfügt Objekt wie CKEDITOR jedes Mal, wenn es erstellt wird und es nicht selbst aufzuräumen, dann könnte diese Art von Problem passieren. – AlfonsoML

+0

Eigentlich bin ich mir nicht sicher, ob es mit den Bindungen zu tun hat, ich denke es hat etwas damit zu tun, dass wir die Elemente sofort nach dem Aufruf von destroy entfernen. – Doogal

+0

Sicherlich könnte das ein Problem sein. Ich bin mir nicht sicher, ob die Destroy-Methode synchron ist, und wenn sie ein Problem findet, hört sie möglicherweise auf, ohne einen Fehler anzuzeigen. Können Sie versuchen, die Elemente in einem 1-Sekunden-Timeout zu entfernen, nur um zu überprüfen? – AlfonsoML

Antwort

0

Das zugrunde liegende Problem war, dass ich einen anderen Editor hatte, die immer aktiv ist. Es scheint, dass ckeditor eine besondere Hauswirtschaft macht, wenn der letzte Redakteur zerstört wird. Da wir nie Null Editoren erreicht haben, trat diese Hauswirtschaft nicht ein. Ich werde unseren anderen Editor erstellen und zerstören, wie es erforderlich ist, da es nicht immer sichtbar ist

Verwandte Themen