我開始使用Javascript進行HTML5移動開發,但也注意到我也可以使用jQuery庫。我的問題是,除了要求你寫更少的代碼之外,jQuery還有什麼要做的嗎? Javascript的性能更快嗎?對不起,新手問題,但我找不到答案,真正感興趣的差異。在此先感謝除了少量代碼之外,使用jQuery over JavaScript的原因是什麼?
回答
jQuery是使用JavaScript構建的庫。越抽象你會得到的表現越少。例如,只需使用本機DOM方法選擇一個元素,將比使用jQuery做得更快。
所以這個問題並不是「找出哪一個更快」,你已經知道jQuery會變慢。這個問題更像是「值得的表現是否值得?」。是的,大多數情況下,這是因爲您在編寫代碼時節省的時間比您獲得的性能更有價值,而大部分時間都是可以忽略的。
另一個因素是你的香草JavaScript代碼的質量。 jQuery已經過多年的測試和維護,並且顯示。
你的問題不應該是「我應該使用jQuery還是純JavaScript」而是「我應該使用哪個庫?」。沒有人應該用零代碼開始一個實質性項目,他們應該至少有一個強大的,經過測試的代碼集合,可以很容易地整理成一個庫或工具包。
一般庫的問題是它必須提供一般解決方案,因此爲什麼jQuery有4000行代碼,任何一個項目可能只需要幾百行。有些庫有更多的代碼行。如果你使用別人的庫,你經常會被綁定到他們的更新時間表,最終可能會使用需要不同版本庫的插件。
如果您擁有自己的圖書館,或者在您的工作區域開發和維護的圖書館,您可以獲得相同的代碼重用,並可以裁剪布料以適合該項目。 jQuery(和大多數通用庫)是單一的:它是全部或者全部,你不能只包含其中一部分(例如,你可能只想要一個好的函數)。你自己的庫可以是模塊化的,所以你只包含你需要的代碼,並且可以避免一般庫必須處理的許多跨瀏覽器問題。大衛馬克的「MyLibrary」是極少數模塊化圖書館之一。
此外,跨瀏覽器的差異正變得越來越少,DOM API越來越豐富,因此使用通用庫的需求越來越少。例如。沒有人佔用document.all了,或者不支持的瀏覽器也不支持addEventListener或attachEvent。一旦支持IE 6和7可以被刪除(幾年之後),使用單一的第三方庫幾乎沒有什麼理由,模塊化將是關鍵。一切都將是一個插件,不需要基礎庫,或者基礎庫將非常小,以提供基本DOM功能的通用API。
雖然「沒有人應該用零代碼啓動實質性項目」具有一定的價值,但人們在**學習* jQuery方面** **的價值要低得多,並且對JavaScript沒有任何瞭解。這基本上導致程序員不知道JavaScript的內部工作是如何工作的,因此發佈諸如*「OMG!」這樣的問題,爲什麼不是'$('#myDiv')== $('#myDiv')? 「*。在某些時候從零開始有**總是**值;特別是自OP剛剛開始。 – Jesse 2013-05-07 23:37:14
非常感謝您花時間寫下所有這些內容。我真的很喜歡你創建自己的圖書館的想法,以滿足他們目前正在從事的任何項目的特定需求。這很有道理,一定會聽從你的建議。再次感謝您花時間編寫所有這些 – 2013-05-07 23:52:30
順便說一句,「少代碼更好」的概念是有缺陷的。 「更少的代碼」不是一個很好的理由,可以自己做任何事情。它應該是你最擔心的問題,特別是在使用最小化器的情況下。 「較少的代碼」通常很難調試和維護,正如許多庫常用的函數調用的鏈接一樣。很久以前,軟件開發工作的估計集中在功能上,而不是代碼行,這個焦點沒有改變,特別是因爲切割代碼可能不到軟件開發項目總成本的20%。 – RobG 2013-05-08 02:47:37
- 1. 爲什麼除了「try..except」塊之外的原因被繞過
- 2. 除了除零之外,double_scalar中遇到溢出的原因是什麼?
- 3. 是什麼原因
- 4. 在while循環之外初始化變量是什麼原因?
- 5. 下面的代碼在javascript中輸出的原因是什麼
- 6. RejctedExecutionException的原因是什麼?
- 7. 在代碼中使用stlport庫的主要原因是什麼?
- 8. 除了提前調用cursor.close()之外,什麼原因會導致StaleDataException?
- 9. 什麼是「||」除了or之外,在JavaScript中引用?
- 10. JavaScript中斷點的原因是什麼?
- 11. 除了listview之外還有什麼用?
- 12. 'System.IO.IsolatedStorage.IsolatedStorageException'的原因是什麼?
- 13. 在Javascript中使用===而不是== typeof的原因是什麼?
- 14. 使用OpenJDK的原因是什麼?
- 15. 使用esb的原因是什麼
- 16. BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE的原因是什麼?
- 17. ChangeConflictException的原因是什麼?
- 18. 旋轉數組的原因是什麼?
- 19. java.lang.reflect.InvocationTargetException:這是什麼原因?
- 20. 將常量放在if語句之後的原因是什麼?
- 21. 在getopts之後使用shift $((OPTIND-1))的原因是什麼?
- 22. PHP在郵件()和SMTP之間使用的原因是什麼?
- 23. 爲什麼jQuery被稱爲jQuery?名稱的原因是什麼?
- 24. 什麼是UnsatisfiedLinkError的原因?
- 25. 我的代碼中發生StringIndexOutOfBoundsException的原因是什麼
- 26. 我的代碼中編譯錯誤的原因是什麼
- 27. 我無法執行下面的代碼的原因是什麼?
- 28. 這段代碼的結果背後的原因是什麼?
- 29. 在Wikitude SDK for Android中使用Javascript的原因是什麼?
- 30. 代碼分析錯誤:預計'; '之前'{'標記 - 是什麼原因造成的?
謝謝。正是我在尋找的答案。對於新手問題再次抱歉 – 2013-05-07 23:49:37