Javascript Knockout.js占用太多内存
我打开Process Explorer并检查firefox.exe进程的“私有字节”列。按下本例中的“添加”按钮后:Javascript Knockout.js占用太多内存,javascript,performance,jquery-templates,knockout.js,Javascript,Performance,Jquery Templates,Knockout.js,我打开Process Explorer并检查firefox.exe进程的“私有字节”列。按下本例中的“添加”按钮后: 评论: 使用此代码: var vm = {Comments: ko.observableArray(["a", "b"])}; ko.applyBindings(vm); $("#btnAdd").click(function() { for(var i = 0; i<500; i++) vm.Comments.push(i.toString()
评论:
使用此代码:
var vm = {Comments: ko.observableArray(["a", "b"])};
ko.applyBindings(vm);
$("#btnAdd").click(function()
{
for(var i = 0; i<500; i++)
vm.Comments.push(i.toString());
});
var vm = {Comments: ko.observableArray(["a", "b"])};
ko.applyBindings(vm);
$("#btnAdd").click(function()
{
for(var i = 0; i<500; i++)
vm.Comments.push(i.toString());
});
varvm={Comments:ko.observearray([“a”,“b”])};
ko.应用绑定(vm);
$(“#btnAdd”)。单击(函数()
{
对于(var i=0;i暂时将内存问题放在一边,当前示例中的大部分时间将花在模板绑定的foreach
选项上。确定数组中的哪些项已更改以确定如何有效地从DOM中添加/删除元素需要做大量工作。在您的示例中,这我们的工作做了500次
您可以通过以下方式编写,从而获得更好的性能:
$("#btnAdd").click(function()
{
var items = vm.Comments();
for(var i = 0; i<500; i++) {
items.push(i.toString());
}
vm.Comments.valueHasMutated();
});
$(“#btnAdd”)。单击(函数()
{
var items=vm.Comments();
对于(var i=0;iRP)而言,RP是正确的。请查看:
另一种非常类似的方法是:
$("#btnAdd").click(function()
{
var a = ["a", "b"];
for(var i = 0; i<500; i++)
a.push(i);
vm.Comments(a);
});
$(“#btnAdd”)。单击(函数()
{
变量a=[“a”,“b”];
对于(var i=0;这是一个很好的洞察,但不幸的是对内存问题没有帮助。顺便说一句,很好的博客!我希望在某个时候自己研究一下这个问题。但是如果你按我上面显示的方式推送多个项目,而不是逐个推送,它确实有助于内存。