淘汰赛中Foreach和模板绑定的表现

时间:2014-11-04 13:07:43

标签: performance templates knockout.js foreach nested

一直在研究foreach和模板绑定的性能问题。在我们的单页面应用中,我们嵌套了foreach / templates。下面是jsperf url,它提供了在没有foreach和foreach的情况下呈现的普通数组的信息;其中标题为“Expanded loop markup”的测试优于“Nested foreach”绑定。  还观察到,对于嵌套和扩展的相应的“foreach via template”测试比没有foreach via模板的测试更耗时。

jsperf url: http://jsperf.com/knockout-nested-foreach-vs-expanded-markup/2

非常感谢你对淘汰3.1.0的表现的帮助

性能问题也出现在淘汰赛3.2版本中。

想知道如何使用嵌套的foreach和/或模板绑定减少加载时间。

1 个答案:

答案 0 :(得分:0)

与Hans概述的一致,如果你真的希望从客户端挤出最多的性能。自定义绑定直接与集合一起工作,将HTML构建为字符串并使用import UIKit class ViewController: UIViewController { @IBOutlet weak var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func nameTextField(nameTextField: UITextField) { var currentTimeOfDay = "" let hour = NSCalendar.current.component(.hour, from: NSDate() as Date) if hour >= 0 && hour < 12 { currentTimeOfDay = "Morning" } else if hour >= 12 && hour < 17 { currentTimeOfDay = "Afternoon" } else if hour >= 17 { currentTimeOfDay = "Evening" } nameLabel.text = "Good \(currentTimeOfDay) \(nameTextField)" } } 之类的内容进行注入。

下面有一个简单的example

&#13;
&#13;
element.innerHTML
&#13;
ko.bindingHandlers.innerHtml = {
  init: function (element, valueAccessor) {
    var lst = ko.unwrap(valueAccessor());

    if (lst) {
      var html = '';

      for (var i = 0; i < lst.length; i++) {
        html += '<li>' + lst[i] + '</li>';
      }

      if (html)
        element.innerHTML = html;
    }
  }
};
    
var vm = function(){
  var self = this;
  self.lst = ko.observableArray();

  for (var i = 0; i < 100; i++) {
    var ary = [];
    for (var j = 0; j < 1000; j++)
    {
      ary.push(j)
    }

    self.lst.push({ num: i, numAry: ary});
  }

};

ko.applyBindings(new vm());
&#13;
&#13;
&#13;