1

私は 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();
    }
  }); 
4

0 に答える 0