2015-05-01 60 views
3

我想優化我的for循環(var階段)中的第二行。我相信,在循環之外移動部分會優化性能。我可以在for循環之外移動哪些內容以提高性能?Javascript:我怎樣才能優化這條線的性能?

for (var i = 0; i < items.length; i++) { 
var phase = Math.sin((document.body.scrollTop/1250) + (i % 5)); 
//var phase = 0.31456656061611776 + (i % 5); 
items[i].style.left = items[i].basicLeft + 100 * phase + 'px'; 
} 
+3

@dsg每個優化問題都是一個代碼審查問題嗎? – RaGe

+5

您將所有不依賴'i'的循環移出。 – Thilo

+4

那麼,這段代碼在你的應用程序中會導致問題? – zerkms

回答

1

可能稍快:

var l = items.length, 
    s = (document.body.scrollTop/1250), 
    phase; 

for (var i = 0; i < l; ++i) { 
    phase = Math.sin(s + (i % 5)); 
    items[i].style.left = items[i].basicLeft + 100 * phase + 'px'; 
} 

然而,你很可能不會注意到其中的差別,除非你有幾百萬的項目。

更新:經過幾個基準測試後,似乎快7%左右,但只開始花費數百萬秒。

+3

如果只有'document.body.scrollTop'不依賴於items [X]。 style.left'一般不能保證。 – zerkms

+0

那麼我假設'left'影響'relative'或'absolute'元素的位置,因此不應該修改滾動(特別是垂直的scrollTop)。但是,如果是這樣,那麼確實沒有太多可以做到的事情。 – floribon