2016-05-04 5 views
0

window.onresize(シングルページアプリケーション)を購読している場合、メモリリークを避けるために購読を解除する必要がありますか?もしそうなら、どうしたらいいですか?退会するにはwindow.onresizeイベントを破棄するサブスクライバ

<script type="text/javascript"> 
    var heightOutput = document.querySelector('#height'); 
    var widthOutput = document.querySelector('#width'); 

    function resize() { 
    heightOutput.textContent = window.innerHeight; 
    widthOutput.textContent = window.innerWidth; 
    } 

    window.onresize = resize; 
</script> 

https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onresize

答えて

1

、あなたが使用することができます。

// Subscribe 
window.onresize = resize; 

// Unsubscribe 
window.onresize = null; 

このメソッドは、唯一のあなたがresize上で実行する機能を提供できるようになります。

また、あなたが使用できます。

// Subscribe 
window.addEventListener("resize", resize); 

// Unsubscribe 
window.removeEventListener("resize", resize); 

このアプローチを使用して、同じイベントに複数のイベントリスナーを添付することができます。あなたはdoを削除するために添付したメソッドへの参照を保持する必要があります。

イベントへのサブスクリプションを廃棄しても、必ずしもメモリリークが発生するとは限りません。たとえば、clickイベントサブスクリプションで<button>を作成すると、<button>がDOMから削除され、コード内に参照がなくなるとサブスクリプションが削除されます。 (少なくとも現代のブラウザでは)

まだ、サブスクリプションを処理して不要なリスナーを削除する方法については、もう少し考えを入れておくとよいでしょう。メモリリークに関しては

+0

* window.onresize = null *私のためには機能しませんでした! – coderz

+0

それはうまくいく、あなたが加入者を付けた方法に依存する。 'addEventListener'やjQueryの' .resize'を使った場合、 'onresize = null'は動作しません。 – user3297291

0

メモリリークやDOMといくつかの重い懸念があるように使用されますが、私の知る限り、何も現代のブラウザはもうそれとのトラブルを持っていません。

(これは主にIEの問題に使用されます。)

あなたがそれらの原因を理解することに興味があるなら、私はDOMのメモリリークの議論を発見した - しかし、再び、今日の仕事で、私はいないだろうあまりにも心配です。

http://javascript.info/tutorial/memory-leaks

resizeイベントでは、私はあなたが一度だけにそれを取り付けることになるだろう期待 - そしてそこに一つだけwindowオブジェクトがあるので、私はそれを考え直しを与えないだろう。

+0

ブラウザに複数コンポーネントのアプリケーションがある場合、文字通り何百ものウィジェットからウィンドウのサイズ変更にバインドすることができます。私たちは現在、このようなことをしているので、あなたは最後の文章にはどんな快適さの価値もありません;-)「私はあなたが一度だけ添付することを期待しています」 メモリリークのリンクが死んでいる – PandaWood

関連する問題