2017-10-08 64 views
-1

想問一個更有效的功能嗎?JavaScript perfomance

#1 
function moveNode (node) { 
    setTimeout(function() { 
     node.style.top = (node.offsetTop+2) + 'px'; 
     moveNode(node); 
    },50); 
} 

#2 
function moveNode (node, distance) { 
    setTimeout(function() { 
     node.style.top = (distance) + 'px'; 
     moveNode(node,distance+2); 
    },50); 
} 

在第一個功能,我們取node.offsetTop財產每次調用,但要記住較少的數據。在第二個函數中,我們可以通過node.offsetTop屬性作爲distance參數只有一次,但請記住它是從調用中調用。所以我不知道這種方式更有效。假設這個函數會(例如在setInterval)被稱爲不同node參數多次

+1

代碼片段中沒有遞歸。性能差異可以忽略不計,但具有''''''距離'''的那個可靠性更高。 – tevemadar

+0

@tevemadar所以當內部函數啓動時,程序忘了父函數? – nikolay

+1

一次將保留一個閉包(內部函數訪問'''節點''和第二個變體'''distance'''),但它不會使控制流遞歸。遞歸意味着控制至少在理論上返回到'''moveNode''',在運行第二,第三等時間之後。 – tevemadar

回答

0

抓取offsetTop可能需要回流,可以是非常慢。它也訪問本地DOM,這比JS屬性訪問慢。第二個將更有效率。相比之下,用於在閉包中存儲多個變量值的內存要求絕對可以忽略不計。

+0

好的,清楚的答案 – nikolay

相關問題