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);
}
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
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
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