2017-02-02 5 views
0

Webアプリケーションは、ckeditorエディタを定期的に作成および破棄します。 Chromeでメモリリークが発生しています。プロファイリングした後、ckeditor.tools.bindの呼び出しにより、ckeditorへの参照が保持されているようです。 editor.destroyはこれらのバインディングを削除する必要がありますか?そうでない場合は、自分で削除する方法はありますか?問題を呈するckeditor.tools.bindで追加されたckeditorイベントのバインド解除

例コード(タイムアウトがタイミングが問題であるかどうかを確認するために追加された)

var editor; 

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

理論上は、 CKEDITORのようなオブジェクトが作成され、それ自体がクリーンアップされない場合、この種の問題が発生する可能性があります。 – AlfonsoML

+0

実際にバインディングに関連しているかどうかはわかりませんが、破棄を呼び出した直後にDOMから要素を削除するという事実と関係していると思います。 – Doogal

+0

確かに問題になる可能性があります。私はdestroyメソッドが同期的であるかどうか分からず、問題が見つかった場合はエラーを表示せずに停止するかもしれません。確認するために、1秒のタイムアウトで要素を削除しようとすることはできますか? – AlfonsoML

答えて

0

は、根本的な問題は、私は常にアクティブで別のエディタを持っていたことでした。最後のエディタが破棄されたとき、ckeditorは特別なハウスキーピングを行うようです。編集者はゼロに達していないので、このハウスキーピングは始まりませんでした。いつも表示されているわけではないので、必要に応じて他のエディタを作成して破棄します。

関連する問題