哪个在for循环中更快,使用temp变量或索引访问值

which is faster in a for loop, accessing values using temp variable or the index?

本文关键字:变量 temp 使用 索引 访问 for 循环      更新时间:2023-09-26

我正在尝试优化一些knockout js代码,我想知道哪个会更快,即使用索引器访问变量:

        for (var i = 0; i < data.length; i++) {     
            data[i].MediaID = ko.observable(data[i].MediaID);
            data[i].MediaName= ko.observable(data[i].MediaName);
            data[i].MediaTypeID= ko.observable(data[i].MediaTypeID);
        }

或声明一个临时变量。

        for (var i = 0; i < data.length; i++) {             
            var temp = data[i];
            temp.MediaID = ko.observable(temp.MediaID);
            temp.MediaName= ko.observable(temp.MediaName);
            temp.MediaTypeID= ko.observable(temp.MediaTypeID);
        }           

使用temp-variable访问应该会稍微快一些,因为您不需要在数组中查找元素。

但是,增益将是最小的

compare

        data.a.b.c.d.e.f.g.MediaID = ko.observable(data.a.b.c.d.e.f.g.MediaID);
        data.a.b.c.d.e.f.g.MediaName= ko.observable(data.a.b.c.d.e.f.g.MediaName);
        data.a.b.c.d.e.f.g.MediaTypeID= ko.observable(data.a.b.c.d.e.f.g.MediaTypeID);

        var temp =data.a.b.c.d.e.f.g;
        temp.MediaID = ko.observable(temp.MediaID);
        temp.MediaName= ko.observable(temp.MediaName);
        temp.MediaTypeID= ko.observable(temp.MediaTypeID);

你不需要查找相同的东西那么多次

如果你想要更快,你也应该缓存data.length

for(var i = 0, len = data.length; i < len; i++)...

如果您担心性能,请不要使用数组。循环的长度。它不是一个值,它是一个内部函数,每次被访问时都重新计算数组的总条目,更好的是:

var total = items.length;
for(i=0; i < total; i++){
   //stuff
}

现在对于你的具体用例,我不知道你正在使用的框架,但如果你正在使用jQuery和/或下划线,而不是循环,你可以使用地图函数之一:http://api.jquery.com/jQuery.map/http://underscorejs.org/地图