2012-02-02 35 views
1

我有一個全局數組,包含我目前使用的元素的ID。每一秒我都會運行一個例程來處理這些元素。jQuery對象數組的性能

var ids = ['abc', 'def', 'zyx'] 

// the following code happens every second 
for (var i = 0; i < ids.length; i++) { 
    el = $("#" + ids[i]) 
    // do stuff with el 
} 

我的問題:我將遭受顯着的性能損失或改善執行以下操作:

var ids = [] 
ids.push($("#abc")) 
ids.push($("#def")) 
ids.push($("#zyx")) 

for (var i = 0; i < ids.length; i++) { 
    el = ids[i] 
    // do stuff with el 
} 

回答

0

你不必猜 - 爲什麼不是create a jsPerf test case

無論如何,這種改變會大大提高性能。沒有理由一直重構相同元素的jQuery對象。我的意見:keep things DRY — cache everything that can be reused

還要注意的是,而不是:

var ids = []; 
ids.push($("#abc")); 
ids.push($("#def")); 
ids.push($("#zyx")); 

你可能只是做:

var ids = [ $("#abc"), $("#def"), $("#zyx") ]; 

這樣可以節省幾個函數調用。

+0

謝謝,我不知道的是在數組中存儲jquery對象的開銷。 – 2012-02-02 08:54:47

+0

-1我必須低估這一點,因爲它絕對不會提高性能*極大*。有一個改進,這是值得的,但它仍然只是幾乎沒有明顯的。 – Guffa 2012-02-02 09:17:23

+1

好吧,我可以理解也許不是很大,但它似乎是一個首選的方法。另外我不知道jsPerf,所以我發現它是一個有用的答案。 – 2012-02-03 00:11:57

2

,你不會看到任何顯着業績增長,但它僅僅是一個好習慣 - 到不要兩次請求這件事,只要你能在一個地方停留一次。

所以我最後的忠告:緩存jQuery的對象只是一次使用jQuery的數組,下班後對象

1

,你會得到輕微改善,因爲你是移動的一些工作圈外的,做它只有一次。

雖然只有三個項目,很少像每秒一次一樣,但您幾乎不會注意到其中的差異。通過id定位一個元素是相當容易的,因爲瀏覽器專門爲此提供了一種方法,創建一個jQuery對象也不是那麼容易。

+0

當然,它可能多達20個左右。當我們無法控制客戶端的硬件時,每一點點都會有所幫助! – 2012-02-02 08:55:21

+0

@JeffV:即使多達20人,也不會有太多的工作。最近一臺體面的電腦上的瀏覽器可以每秒處理大約1000次。我做了一個性能測試,這表明差別不是很大。 http://jsperf.com/precreate-jquery-objects – Guffa 2012-02-02 13:11:59