4

Backbone Relation を使用してビルドしたアプリが、狂ったようにメモリ リークを起こしています。私が理解していることから、これは、モデルで Backbone.Relational.store.unregister() を呼び出していないため、モデルがストアに永久に保持されるためです。

データ モデルはかなり深く、相互に関連する多くのクラスがあり、変化するフィルターに一致するモデル ツリーを多かれ少なかれ継続的に取得しています。ただし、個々のモデルの所有権は明確ではありません。最初にモデルを取得した部分以外のアプリの他の部分でも使用されている可能性があるためです。

モデルの登録をいつ解除する必要がありますか? Backbone Relational のソースを読んだ後、「destroy」で unregister() が呼び出されていることがわかりますが、モデルを削除することは決してないので、それはできません。

4

1 に答える 1

4

おそらく、セットアップについてもう少し説明する必要があります。一般的に、モデルをどのように管理し、アクセスしますか? アプリケーション スコープのシングルトン コレクションはありますか?

登録解除をコレクションのremoveイベントにバインドすることで、この問題を解決しました。効果があるとすれば、モデルはコレクションの一部である場合にのみリレーショナルでした。モデルがコレクションから削除された後、破棄されました。アプリケーションのアーキテクチャによっては、これが機能する場合と機能しない場合があります。

補足: Backbone.Relational は、私の経験では非常に危険であるため、あきらめました。あなたがそれを使い始めると、それは魔法のように機能しますが、ラインを下にして顔を向けるのは簡単です. あなたが持っているように見えるのと同じくらい。また、その設計により、アプリケーション コードのあらゆる側面と密接に結合することが推奨されるため、それを取り除くことは非常に困難になる可能性があります。

于 2012-12-14T13:11:36.213 に答える