Dojo widgetの分析過程
1347 ワード
注:本文は李文兵のブログから来ました.javascriptメモリの漏洩を分析するのに非常に役に立つと思います.ありがとうございます.
dojo widget(或いはdijit)の分析過程を理解して、dijit全体のライフサイクルをもっと理解させるだけでなく、自分で決めたdijitの中でどのように正しく資源を釈放するかを助けてくれます.(ここで議論しているドジョウは0.9または以上のバージョンのはずです.)
以下はdijitの解析過程です.
destroyを使ってdijitを破壊します.私たちはdestroyRecursiveを使ってdijitを破壊するべきです.上記の過程から、destroyRecursive()は子供widgetsを破壊することが分かります..
destory()を使ってカスタマイズdijitのリソースを廃棄します.もっと怖いのは、あるコードが直接destryを上書きすることであり、_Widgetのdestoryを呼び出さないことです.uninitialize()こそdijitに露出されて定制化widgetに分析を行うstub functionです.結論
destroyRecursiveを使ってdijitを破壊し、uninitializeを使って固定化されたdijitで自分の資源を釈放します.destroyDescendants、destroyRenderingはほとんど使えません.それらを上書きしないでください.
dojo widget(或いはdijit)の分析過程を理解して、dijit全体のライフサイクルをもっと理解させるだけでなく、自分で決めたdijitの中でどのように正しく資源を釈放するかを助けてくれます.(ここで議論しているドジョウは0.9または以上のバージョンのはずです.)
以下はdijitの解析過程です.
destroyRecursive
/ \
destroy destroyDescendants
/ | \
uninitialize disconnect() destroyRendering
いくつかのよくあるエラーは以下の通りです.destroyを使ってdijitを破壊します.私たちはdestroyRecursiveを使ってdijitを破壊するべきです.上記の過程から、destroyRecursive()は子供widgetsを破壊することが分かります..
destory()を使ってカスタマイズdijitのリソースを廃棄します.もっと怖いのは、あるコードが直接destryを上書きすることであり、_Widgetのdestoryを呼び出さないことです.uninitialize()こそdijitに露出されて定制化widgetに分析を行うstub functionです.結論
destroyRecursiveを使ってdijitを破壊し、uninitializeを使って固定化されたdijitで自分の資源を釈放します.destroyDescendants、destroyRenderingはほとんど使えません.それらを上書きしないでください.