工作時,我經常使用相同的節點使用變量,而不是重新聲明jQuery對象的選擇jQuery的對象,如$('.often')
方面正如我想象,jQuery的每一次組成一個新的對象吧,但我也可以將已經創建的對象分配給變量:often=$('.often')
除了可能更好的可讀性以外,將同一對象作爲變量使用可以提高腳本的性能?更好的是它在速度
更好的是它在速度
回答
調用具有相同參數的函數兩次是一個代碼味道......在任何語言。
函數的實現通常是將函數的調用者並不關心一個細節,但主叫方通常可以安全地假定調用該函數兩次比它的返回值賦值給一個局部變量更加昂貴。
除非函數的行爲不同,這取決於狀態(例如,在多線程應用程序),只需要調用一次。
這可能是款式比技術更多的事情,但如果我看到這樣的事情:
if (get_my_value("param") == 1) {
return "Got 1.";
}
if (get_my_value("param") == 2) {
return "Got 2.";
}
我將它改寫爲:
var my_value = get_my_value("param");
if (my_value == 1) {
return "Got 1.";
}
if (my_value == 2) {
return "Got 2.";
}
我會改寫原因它是:
- 如果
get_my_value
是昂貴的,我已經提高了性能。 - 通過減少重複代碼,我提高了可維護性。
- 通過減少重複代碼,我提高了可讀性。
+1,但你在第二個代碼塊中有一對額外的關閉對象。 –
@BlueSkies - 謝謝。固定。 – ken
我通常會說,是的,這是值得緩存中的對象的變量。但是,表現並不一定是我這樣做的理由。
根據約定,你會發現很多的JavaScript/jQuery的開發者前綴變量,指的jQuery對象與$
,如
var $myObject = $('#id');
之所以這樣做,是你現在知道以後有無需再次換行變量,即它避免了這個錯誤:
var myObject = $('#id');
... much later on out of sight of that declaration
var myJQueryObject = $(myObject); // No need for this, but its a common mistake.
我不明白。你使用變量的原因是爲了讓你可以有一個以'$'開頭的變量?我的意思是,如果你已經有一個變量,這可能是需要的,但它並不是很重要的緩存的原因。 –
@Blue Skies據我所知,$只用於記住它是一個變量,它包含一個jQuery對象,而不是其他一些JavaScript實體,比如DOM節點,所以您不會再錯誤地將它包裝到jQuery對象中。 – Dmay
@Dmay:對。我在說,這個答案中給出的緩存變量的原因沒有任何意義。可能有理由用'$'來標記某些變量,但是這假定已經決定需要一個變量。你首先想問一個變量是否需要。將'$'放在變量名的開頭與決定在您的環境中使用變量沒有任何關係。 –
- 1. 是它更好地在.NET
- 2. 速度更快/使用更好:MySQL還是PHP md5函數?
- 3. 速度優化 - 哪個更好?
- 4. 更好的方法輪廓速度幅度與時間x軸
- 5. 更改音頻的速度(速度)
- 6. Telerik OpenAccess與SubSonic在簡單的速度測試(不是「哪個更好」)
- 7. 什麼是更好的方法來播放MP3/WAV和改變速度(音頻速度)Android?
- 8. 更好的中間件在快速
- 9. Angular:優化速度的更好方法是什麼(ng-directives或$ watch)?
- 10. 模糊時間戳加入Postesql並實現更好的速度
- 11. 如何優化此代碼以獲得更好的速度?
- 12. 改變下拉速度的更好方法
- 13. ImageIO.read(...) - 速度很慢,有沒有更好的方法?
- 14. 地圖和最小堆以獲得更好的速度
- 15. 速度更快:JDBC還是JNDI?
- 16. 速度更快:JMP還是一串NOP?
- 17. 速度更快...循環還是分裂?
- 18. 速度更快嗎?
- 19. 什麼是使用php的速度最好的壓縮
- 20. ImageMagick與GD - 哪個速度更快,資源更少,產生更好的圖像?
- 21. 與python的feedparser速度混淆,它在命令行速度非常快,但在部署時速度很慢
- 22. OpenCL內核在速度更快的GPU上執行速度更慢
- 23. DelayQueue更高的速度remove()?
- 24. 什麼是一個好的風扇速度算法?
- 25. 描述Web用戶連接速度的好方法是什麼?
- 26. 什麼是計算Android當前速度的好方法?
- 27. 。它真的比Ajax更好?
- 28. C++ STL容器的性能。更好的速度在結構或無結構?
- 29. 更高精度的Android加速度計
- 30. jQuery的:是Val()速度不夠快,重複使用或者是更好地把價值在一個變量
通常情況下,是的。 –
取決於,在大多數情況下緩存選擇器是有意義的,使用一次或兩次,這不是真正必要的 – adeneo
它不僅建立一個新的對象,它還必須積極查詢DOM! – Pointy