JavaScript アプリの 1 つ (さらに悪いことに IE) のパフォーマンスの問題を追跡してきましたが、jQueryUI ボタン機能まで追跡することができました。問題を示すjsfiddleを作成しました。問題は 3 つの部分です。
まず、ボタンの生成が非常に遅いです。このページは IE8 では 5 秒以上で 800 個のボタンを生成しますが、ボタン機能を無効にすると約 700 ミリ秒かかります。さらに悪いことに、作成/削除サイクルごとにどんどん遅くなります。比較のために、Chrome では、ボタン機能がある場合は 1 秒未満 (約 600 ミリ秒)、ボタンがない場合は約 50 ミリ秒かかります。これは、両方のブラウザで 10 倍の速度低下です。
第二に、これらのボタンをすべて削除/破棄するのも遅いです。コンテナのメソッドを使用してempty()
すべてのボタンを消去し、最終的にボタンを呼び出しdestroy
ます。この操作には、IE8 で約 5 秒、Chrome で約 500 ミリ秒かかります。jquery ボタン機能を削除すると、IE8 で 200 ミリ秒、Chrome で 30 ~ 40 ミリ秒かかります。これは、ボタン自体を生成するよりも 20 倍遅くなります。
第 3 に、ボタン機能が原因で IE で大量のメモリ リークが発生しているようです。ボタンの作成と削除を繰り返すと、メモリ使用量がどんどん増えていきますが、もう一度ボタン機能を削除すると、これが修正されます。
誰でもこの動作を説明できますか? これは、報告すべき jQueryUI のパフォーマンスの問題ですか、それとも落とし穴に陥っていますか? 回避策はありますか?
注:ボタン機能を削除すると言うとき、それ<button>
はドキュメントから要素を削除するのではなく、jqueryUIのボタン機能への呼び出しを削除するだけです:
.button({
'text': true
})