0

私はいくつかのノックアウト 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

4 に答える 4

3

配列内の要素を検索する必要がないため、temp-variable を使用したアクセスはわずかに高速になるはずです。

ただし、利益は最小限に抑えられます

于 2013-04-20T16:00:09.690 に答える
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);

同じことを何度も調べる必要はない

于 2013-04-20T16:06:57.370 に答える
0

より速くしたい場合は、data.lengthもキャッシュする必要があります

for(var i = 0, len = data.length; i < len; i++)...
于 2013-04-20T16:07:25.600 に答える
0

パフォーマンスが気になる場合は、ループで array.length を使用しないでください。これは値ではなく、アクセスされるたびに配列の合計項目を再カウントする内部関数です。より良いのは次のとおりです。

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

特定のユースケースについて、使用しているフレームワークはわかりませんが、ループの代わりにjQueryおよび/またはアンダースコアを使用している場合は、マップ関数の1つを使用できます: http://api. jquery.com/jQuery.map/ http://underscorejs.org/#map

于 2013-04-20T16:08:02.443 に答える