一直在研究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和/或模板绑定减少加载时间。
答案 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:
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;