Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js占用太多内存_Javascript_Performance_Jquery Templates_Knockout.js - Fatal编程技术网

Javascript Knockout.js占用太多内存

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()

我打开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());
});
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;这是一个很好的洞察,但不幸的是对内存问题没有帮助。顺便说一句,很好的博客!我希望在某个时候自己研究一下这个问题。但是如果你按我上面显示的方式推送多个项目,而不是逐个推送,它确实有助于内存。