2016-08-28 8 views
1

私は、それにcreatedCallbackの中に変異オブザーバを作成するCustom Elementクラスを持っています。今まで呼んだことのない時点はobserver.disconnect()です。これはメモリリークを引き起こすでしょうか?もしそうなら、それをどう扱うことをお勧めしますか?ガベージコレクタはよく、それがメモリリークを持っていなければならないように設計されている場合カスタム要素コンストラクタでMutationObserverを作成した際にメモリリークが発生しましたか?

class SomeElement extends HTMLElement { 
    createdCallback() { 
     // Observe nodes in the future. 
     const observer = new MutationObserver(changes => { 
      for (let change of changes) { 
       if (change.type != 'childList') continue 

       for (let node of change.addedNodes) 
        this.childConnectedCallback(node) 

       for (let node of change.removedNodes) 
        this.childDisconnectedCallback(node) 
      } 
     }) 
     observer.observe(this, { childList: true }) 
    } 

    childConnectedCallback(node) { 
     // ... 
    } 

    childDisconnectedCallback(node) { 
     // ... 
    } 
} 

答えて

1

は、ここで基本的な例です。突然変異オブザーバは、カスタム要素自体が削除されたときに破棄されます。

の方法ではいつでもobserver.disconnect()に電話することができます。この場合、参照を保持するためにconst observerの代わりにthis.observerを使用してください。

+0

何らかの理由で(私は現時点で覚えていません)、私の場合は「切断」と呼ぶのは実現不可能でした。それが私が尋ねた理由です。まあ、私はJSエンジンが十分にスマートになることを願っています... – trusktr

関連する問題