15

KnockoutJSを使用して複雑なエンタープライズアプリケーションを構築し、特にIE8でパフォーマンスの低下に直面しました。アプリケーションは1GBを超えるRAMを使用し、メモリを解放しない場合があります。調査中に、KnockoutJSがDOMノードへの参照を保持し、削除しないことを発見しました。これは、公開されているKnockoutJSの例に対してIESieveを使用して再現できます。DOMノードを追加および削除する例を試しながら、DOMの使用率を確認するだけです。

誰かがこの問題に直面し、これを解決する方法について何かアイデアがありますか?

4

2 に答える 2

2

IE 8のノックアウトJSでも同様の問題に直面していました。問題領域の1つは、監視可能な配列(500以上の要素)を持ち、それらすべてを使用してUI(テーブルのような構造またはリストのような構造を想像する)を構築することでした。私たちのために働いた唯一の回避策は、画面に収まる可能性のあるアイテムが非常に少ないようにビューモデルを変更することでした。また、監視可能な配列が更新され続けるように、スクロールイベントのハンドラーを追加する必要がありました。そして(これをあまり誇りに思っていませんが)、表示されたレコードの上部に空のdivを追加して、ビューがスクロールしたような錯覚を与える必要がありました。

于 2012-11-27T07:36:23.130 に答える
1

おそらく、DOM要素が削除されたときにイベントバインディングが解放されないことに関係しています。それがノックアウトの内部で起こっていることである場合は、パッチを適用してプルリクエストを送信する必要があります。

この種のことはbackbonejsでもよく起こります。JavascriptMVCは、それ自体の後のクリーンアップに少し適しています。

于 2012-11-27T07:33:14.580 に答える