5

jQuery UI のドラッグ可能なライブラリでメモリ リークを発見したと思いますが、問題が Meteor によって引き起こされている可能性がありますが、よくわかりません。

私のアプリが最初にユーザーのグループによって一日中使用されたとき、私は最初にこれに気付きました。タブでアプリを開いたところ、その日の終わりまでに非常に遅くなり、使用できなくなりました。メモリ使用量を確認したところ、ほぼ 1 GB のメモリを使用していることに気付きました。

この問題を再現するために、アプリにログインし、Chrome の開発ツールでメモリ使用量を記録しながら一連の更新を行う PhantomJS スクリプトを作成しました。そこで、問題の原因となっているコードを探しに行ったところ、テンプレートのレンダリング イベントで要素に配置していたドラッグ可能/ドロップ可能なイベントであることがわかりました。

私のファントムスクリプトがドラッグ可能で実行されている間のメモリ使用量の例を次に示します。 ここに画像の説明を入力

そして、ドラッグ可能のない私のメモリ使用量は次のとおりです。 ここに画像の説明を入力

注:ゼロの構成オプションを使用して、ドラッグ可能およびドロップ可能を一緒に、および個別に試してみましたが、リークに目立った変化は見つかりませんでした。

最初のグラフからわかるように、スクリプトの実行が停止した後 (約 1.4 分) にメモリ使用量が解放されておらず、メモリ使用量がかなり増加しています (14.3 MB から 169 MB)。これは、約 300 ~ 500 の更新を実行しています (特に、多くのユーザーがいる 1 日を通して、おそらくそれほど非現実的ではありません)。

ここで重要なのは、Chrome がタイムライン タブに表示するノード数だと思います。スクリプトが実行された後、DOM ノード数によると 100,000 以上の DOM ノードがあり、2 番目には約 1000 です。

この問題が現実であることを確認するために、完全に独立したプロジェクトを作成しました。誰でも遊べるように、これを github に置きました。私のphantomJSスクリプトはルートディレクトリにあります。

https://github.com/davidworkman9/jQueryDruggableMemLeakWithMeteor

Meteor にするか jQuery UI にするか、またはこれらのパッケージのいずれかからの修正なしで問題を解決できるかどうか、ここからどこに行くべきかわかりません。

4

1 に答える 1