在for循环中更快,使用临时变量或索引访问值?

时间:2013-04-20 15:58:12

标签: javascript performance

我正在尝试优化一些淘汰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);

        }           

4 个答案:

答案 0 :(得分:3)

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

然而,增益将是最小的

答案 1 :(得分:0)

比较

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

你不需要多次查找同样的东西

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如果您担心性能,请不要在循环中使用array.length。这不是一个值,是一个内部函数,每次访问时重新计算数组的总项,更好的是:

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

现在针对您的特定用例,我不知道您正在使用的framweworks,但如果您使用的是jQuery和/或下划线,而不是循环,则可以使用其中一个map函数: http://api.jquery.com/jQuery.map/ http://underscorejs.org/#map