2009-06-10 9 views
8

私が取り組んでいるアプリケーションのUIは、最近Ext.jsでやり直してあり、IEのメモリ使用量が非常に大きいようです。 IEを使用しているときにExt.jsのメモリに関する既知の問題はありますか?Ext.jsのメモリに関する問題があります

+0

すべてのお返事ありがとうございます。自分のチームのUI開発者に渡します。 –

答えて

9

あなたの質問で私に飛びつく最初のことは、あなたがIEでこれを見ていることです。私のチームは最近、同じ問題(IE上のExtjs)を経験しました。それはExtが原因ではなく、むしろIEが原因だと分かります。

「IE閉鎖メモリリーク」の迅速なGoogleがあなたの説明の多くを見つけるでしょうが、次のように基本的な要点は次のとおりです。

IEはDOMとJavaScriptを管理するために2つの別々のエンジンを使用しています。 JavaScriptがDOM要素を作成するための呼び出しを行うと、Javascriptエンジンは別の要素に到達してその要素を作成します。 DOM要素のイベントにJavaScriptを添付すると、DOM側からJavaScript側にリンクが作成されます。

問題は、各エンジンに独自のガベージコレクションがあり、他のエンジンには見えないという点にあります。循環参照は、大量のメモリを非常に迅速に食べることができます。

0

私が心配する限り、私はExtJSで注目すべきメモリリークについて聞いていません。私は確かにいくつかありましたが、彼らは通常、かなり速く固定され、コミュニティは非常に大きく、ほとんどのバグが知られています。

デザインは、ほとんどの場合、不要になったときに追加したり削除したりできる個別のコンポーネントに基づいていることを確認してください。ExtJS Webページは一度しか読み込まれず、memは追加のコンポーネントそれ。コンポーネントの使用を終えたら、Ext.destroy(this.el)を使用してmemを解放することができます。

また、Firebugを使用して、削除する必要があるコンポーネントまたはオブジェクトを追跡するようにしてください。

1

経験豊富でないプログラマー向けにExtJSを使ってプログラミングするとき、メモリリークを作成するのはかなり簡単だと思います。これはExtJS自体の問題ではありません。プログラマーが簡単にそのような間違いを犯すことを可能にするのは、ExtJSプログラミングのパラダイムです。

私の経験から、ExtJSを使って大胆なAJAXチャットをしようとするとメモリリークが発生しました。 AJAXコールバック(データストア、グリッド操作など)内でいくつかのオブジェクトが常に作成されると、これらのオブジェクトは解放されず、破棄されません。 ExtJSのメモリリークを避けるために、特別で非常に巧妙なテクニックが必要で、AJAXやコールバックに関係するだけではありません。

でも、ExtJSは素晴らしいライブラリですが、慎重に使用する必要があります。

+1

これに役立つストアのautoDestroyプロパティがあります。 – geographika

0

孤立した要素に起因するExt 2.2の多くのリークをカバーするthis thread in their forumsをチェックしてください。 Ext 2.2.1がそれらのほとんどを修正したようです。

問題は引き続きOpen、btwです。 ;)

関連する問題