2009-01-02 17 views
4

如果你正在做類似如下:jQuery的:是Val()速度不夠快,重複使用或者是更好地把價值在一個變量

var i = $('input[@name=some_field]'); 
if (i.val() != '' && !(i.val() >=1 && i.val() <= 36) || i.val() == 'OT')) { 
    i.focus(); 
} 

i.val()速度不夠快,多次使用或者你應該做的:

var value = i.val(); 

第一,然後在if語句中使用的值,如:

var i = $('input[@name=some_field]'); 
var value = i.val(); 
if (value != '' && !(value >=1 && value <= 36) || value == 'OT')) { 
    i.focus(); 
} 

...?

回答

12

這不一定是一個jQuery問題,但它適用於大多數編程語言。事實上,這個問題還有很多不僅僅是性能問題。

有一點需要記住的是,如果你存儲了這個值,那麼在執行你的後續代碼的過程中,它不可能會改變。大多數時候,這是你期望和想要的。但是在某些情況下,對val()的調用會返回一個不同的值,特別是在循環和執行需要很長時間的情況下。

在您的特定示例中,發生這種情況的機率非常低,因爲它只是一些調用而不是循環構造。鑑於只有幾個電話,業績可能不會成爲這裏的主要關注點。但是這個觀點的理論依然存在 - 如果你想保證價值不變,就把它放在一個變量中。既然它也給你最好的性能考慮,我認爲這將是大多數情況下的最佳做法。

+0

我完全同意 - 非常好的答案! – 2009-01-02 05:14:12

1

你不打算通過調用jQuery的val來獲得性能。

它比本地DOM .value調用要慢,因爲您承擔額外的函數調用的額外開銷以及函數內部發生的事情 - see function definition of val here。除非你這樣做了幾百次,否則你不會注意到它。

我會選擇哪種方式,你覺得更具可讀性,並與這種方式或其他並堅持它在你的代碼!就我個人而言,我只需每次撥打電話val並保存額外的任務。

3

如果你看看jQuery代碼,你會發現執行val()函數時發生的所有事情,所以我建議將它分配給一個變量,而不必重複執行它。

4

當沒有任何參數調用時,我不認爲val()會顯着變慢,直接訪問value屬性。根據我對jQuery源代碼的閱讀,基本上所有的val()方法都是檢查元素是否爲select,如果不是,只需返回value屬性的內容(刪除\ r個字符)。函數調用會有一些開銷,並且字符串替換需要一些開銷,但是我沒有讀過任何內容,表明開銷會很大。

如果您真的擔心,請嘗試對大量迭代中的代碼進行基準測試。否則,只要選擇哪一種方法看起來最清潔你的眼睛,去爲它。

1

一般來說,我會說永遠不會多次調用函數來獲得相同的值。如果僅通過避免函數調用開銷,您將使代碼更具可讀性和更高效。

相關問題