dojoなどのツールキットを使用してブラウザで長時間実行されているアプリケーションでは、ぶら下がっている参照を避ける必要があることを何度も何度も聞きます。しかし、各言語/フレームワークには、メモリ管理に関して独自の特質があります。dojoでメモリリークを回避しますか?
dojoでアプリケーションをビルドするときに参照をぶら下げるのを避けるにはどうしたらいいですか?私は、iOSの "alloc"の行に沿ったルールを考えています:どのように使用するか、やった後にあなた自身の後をきれいにする方法。
dojoなどのツールキットを使用してブラウザで長時間実行されているアプリケーションでは、ぶら下がっている参照を避ける必要があることを何度も何度も聞きます。しかし、各言語/フレームワークには、メモリ管理に関して独自の特質があります。dojoでメモリリークを回避しますか?
dojoでアプリケーションをビルドするときに参照をぶら下げるのを避けるにはどうしたらいいですか?私は、iOSの "alloc"の行に沿ったルールを考えています:どのように使用するか、やった後にあなた自身の後をきれいにする方法。
私がやることの最大のものは、接続するイベントを切断することを覚えておくことです。カスタムdijitの中に例えばこれに単純なパターン、あります
:
今//connecting some events
this._events = [
dojo.connect(...),
dojo.connect(...)
];
が、それは切り離すことは非常に簡単です:
dojo.forEach(this._events, dojo.disconnect, dojo);
dijitの中this.connect
を使用するときに同じパターンが適用されます。
this answerに記載されているイベントハンドラを切断することをお勧めしますが、問題が発生する可能性があります。ガベージ・コレクターが検出できない循環参照や、Dojo自体が正しく解放しなかった参照が存在する可能性があります。場合によっては、明示的に "削除"を呼び出す必要があります。例としてthisを参照してください。
私はこれがどんなツールセットでもそうだと思います。しかし、ほとんどの人は予防可能な状況の多くを助けることができるいくつかのガイドラインを持っています。 –
dijitウィジェットは、破棄されたときに 'widget.connect'に接続されているものを自動的にクリーンアップします - 一般に、ページがアンロードされるとすべてのウィジェットが破壊されます(少なくともIEでは歴史的に重要です)。 –