私は emberjs でネストされた ArrayController を使用しています。基本的に、コンテンツが子 ArrayController で構成される親 ArrayController が 1 つあります。この子 ArrayController のそれぞれの内容は、単純な emberjs オブジェクトのリストです。タイムライン ツールと Chrome のプロファイリング ツールを使用してアプリケーションのメモリ使用量を監視すると、子の ArrayController を削除するときにメモリ リークが発生しているようです。私はemberjsの最新のマスターを使用しています。
簡略化されたコードとデモは、http://jsfiddle.net/qVNtv/22/にあります。「追加」をクリックすると、子として 40 個の単純な emberjs オブジェクトを持つ 20 個の子 ArrayController が追加されます。[すべて削除] をクリックすると、すべての子 ArrayController が削除されます。「追加」と「すべて削除」のサイクルごとに、全体的なメモリ使用量が増加します。何も使用しない場合{{action}}
、全体的なメモリ使用量は一定のままです。
私は何か間違ったことをしていますか?このメモリ使用量の増加を何とか回避できますか?
デモでは、ネストされた 2 つのテンプレートで構成される簡単なテンプレートを使用します{{#each}}
<script type="text/x-handlebars">
<input type="button" value="Add" onClick="Demo.containerController.addController();"/>
<input type="button" value="Remove all" onClick="Demo.containerController.removeAll();"/>
{{#each Demo.containerController.content tagName="ul"}}
<li>{{#each content}}<a {{action "test"}}></a> {{prop}}{{/each}}</li>
{{/each}}
</script>
コードは
Demo = Ember.Application.create();
Demo.Model = Ember.Object.extend({
prop : ''
});
Demo.Controller = Ember.ArrayController.extend({
content: []
});
Demo.containerController = Ember.ArrayController.create({
content : [],
addController : function() {
for (var i = 0; i < 20; i++) {
var cnt = [];
for (var j = 0; j < 40; j++) {
cnt.pushObject(Demo.Model.create({prop: 'test' + j}));
}
this.pushObject(
Demo.Controller.create({
content: cnt
}));
}
},
removeAll : function() {
this.clear();
}
});