2013-06-07 19 views
9

私はBackbonejsRequirejsを使用して、1ページのWebアプリケーションを作成しています。 私のアプリにmemory leaksがあるようです。Backbonejs Appのメモリリークの問題

テスト用にサンプルコードを作成しました。ビューオブジェクトを作成し、render関数を呼び出し、返されたhtmlDOMに添付します。
返されたhtmlbuttonです。ボタンをクリックすると、そのcallbackはビューが破棄される機能destroyを呼び出します。

しかし、chrome heap profilierを実行すると、まだdetached DOM treeが表示されています。それを深く見れば、referencesjQueryによって保持されていることがわかります。

これはメモリリークかどうかは疑問です。 はいの場合、mycodeは参照を保持していません。 問題はjQueryにありますか?

サンプルコードはlinkです。
ヒープスナップショットのスクリーンショットも添付しました。バックボーンを使用して構築

Heap snapshot 1

Heap snapshot 2

References for Detached DOM element

+0

この問題を解決を願って幸運 の最高一般的なアドバイスとして:この種の問題に対処するときは、各要素を分離してください:requirejsを取り除いて、デバッグ中の処理が少ないようにしてください。もう一つのアドバイスは、バックボーン1.0.0にアップグレードし、この種の問題に対処するために正確に導入された新しい 'listenTo'と' stopListening'関数を利用することです。ビューで 'remove'を呼び出すと' stopListening'も呼び出されることに注意してください。 – namero999

+4

@gustavohenkeバックボーンにメモリリークの問題はありません。それらは開発者によって作成されています:) –

+0

メモリの問題がある場合、すべてのハンドラの場所を確認し始めます。おそらく、removeが処理しないビューによって暗黙的に設定されているハンドラがあります。 – adrian

答えて

1

アプリケーションは、多くの場合、孤立したビューによって引き起こされるメモリリークを持っています。私は私の意見を管理するマリオネットを使ってこの問題に取り組んでいます。バックボーンを直接使用するのは典型的な方法ではありません。実際には、フレームワークを開発するためのツールキットです。

+3

実際、バックボーンは追加のフレームワークなしで直接使用することができ、実際には膨大な数の開発者が直接使用します。ただし、孤立したビューに関するあなたの意見は有効です。孤立ビューのクリーンアップの管理は、バックボーンの実装の標準プロセスでなければなりません。 – dcarson

+1

私は実際に直接使用するために「細かい」バックボーンに同意しません。私はソフトウェア開発のあらゆる面でかなり経験があり、私は昨年自分自身でバックボーンを使ってきました。私がマリオネットに移ったとき、私は安堵のため息を吐きました。私は自分のコードの半分を削除しました。私は常に直接バックボーンを介してマリオネットをお勧めします。 –

+0

@EngineerDollery私はMarionetteを使用しました。それは私のために素晴らしい仕事をしましたが、このケースでは私はビューが孤立しているという事実が少なくなるようにビューをクリーンアップしています。今、私の最大の懸念はDOMツリーを漏らすことです。最後のイメージを見るとjQuery私のコードを見てください、非常に簡単です、それは私の心配を示しています。 – bitsbuffer

1

この経るuがより多くのアイデアを得るでしょうし、あなたの問題に対する可能な解決策を見つけることリンク

https://paydirtapp.com/blog/backbone-in-practice-memory-management-and-event-bindings/

http://lostechies.com/derickbailey/2012/03/19/backbone-js-and-javascript-garbage-collection/

私はあなたがすぐに

+3

ようこそスタックオーバーフロー。あなたの答えの中のリンクを要約してください。そうすれば、彼らが古くなっても答えは完全に役に立たないわけではありません。 – michaelb958