拋棄jQuery:Why?


jquery t shirt

原文鏈接:http://blog.garstasio.com/you-dont-need-jquery/
我的Blog:http://cabbit.me/you-dont-need-jquery/why-not/

你不再需要jQuery!

Web工程師太依賴jQuery了,某種意義上說jQuery已經成了JavaScript的同義詞。但是我們真的需要他么?或許我們應該反思一下什么時候才真的需要jQuery。

對我個人而言開始使用jQuery的理由是他把我的工作變得簡單多了,開發Web應用已經幾乎離不開它。曾經在不同瀏覽器里Web API的實現有很大區別,而jQuery幫我抹平了這些,所以我很少再用document.getElementById這樣的原生JavaScript函數。依賴jQuery衍生出了無數極其優秀的類庫,從完美的下拉菜單、復雜的表單驗證到這幾年流行的瀑布流布局,這些都讓我的工作變得簡單多了。

我一直堅信jQuery是開發JavaScript工程必須的,2012年,當時我需要開發維護一個跨瀏覽器的大文件上傳組件時,我的第一直覺就是我要用jQuery重寫已有的代碼,因為我已經下意識把jQuery當做簡化工作的一部分標准。但是社區的用戶並不希望我這樣做——他們不想引入額外的第三方類庫,就這樣我(被迫/不情願)的重新開始學習原生瀏覽器API。出於意料的是,我發現不再依賴jQuery之后的工作比我想象的要簡單得多!我曾經以為沒有jQuery我就不會寫JavaScript代碼了,但是現在我發現jQuery並不是必須的!

拐杖?陷阱?

曾幾何時我第一次使用JavaScript開發大型項目,jQuery就同步進入了我的工作,事實上我是從見識了無比強大的jQuery選擇符系統之后才開始喜歡上Web開發的。我並沒有深入學過“真正的”瀏覽器原生API(document.getElementById ?那時覺得看着好丑!),在被迫學習原生API之前,事實上我也不完全清楚怎么直接訪問並操作DOM元素——jQuery全都幫我做了。jQuery已經成了我的拐杖,當初用它是因為他能讓我走的更好,但是后來我離開他已經不會走路了

我發現我掉進了一個陷阱,一個很多Web開發新手都掉進的陷阱。我本應該先花時間去理解JavaScript本身以及瀏覽器提供的API,但是我卻因為jQuery提供的蜜罐而止步不前。邏輯上我們應該這樣系統的學習JavaScript開發:

  1. 學習JavaScript語言
  2. 學習瀏覽器API
  3. 學習jQuery(或者其他框架、類庫,實際項目中會大量用到的)

譯者注:事實上這也是JavaScript的聖經犀牛書JavaScript: The Definitive Guide)的撰寫順序。可實際上包括譯者在內,很多Web開發新手看到"第二部分:客戶端Javascript"的時候就直接略過了,畢竟那時覺得和瀏覽器API比起來,jQuery看上去是那么優雅。

工程實踐中,很多Web開發新手(比如我)是從第3步開始的,完全忽略了1和2的存在,這是完全可以理解的,因為學會了jQuery(或者其他類庫)我們就已經可以動手開始寫代碼了~ 但是如果你不清楚jQuery的背后到底發生了什么,就一定會在未來的開發中遇到問題。你也一定會遇到不能使用jQuery的項目,比如流行的Angular.js這樣的框架,初學者就最好刪掉jQuery類庫,從頭開始學JavaScript。

跨瀏覽器支持

支持jQuery最常見的理由中最常見的一條,就是他修復了“不一致的DOM API”。這沒錯,但事實上不一致的DOM API只有在IE6/7及更早的版本中才大量存在。瀏覽器發展到2014年,非現代瀏覽器的使用比例已經越來越少。jQuery開發組自身也意識到這個問題,逐漸開始削減對這部分瀏覽器的支持,從jQuery 3.0開始,jQuery的版本分化支持所有瀏覽器的完整版只支持現代瀏覽器的精簡版。我們需要面對的DOM API已經沒有那么糟糕,基本的DOM元素創建、遍歷和操作已經統一,至少在所有的現代瀏覽器中是這樣。

從IE8開始,瀏覽器API開始逐漸標准、穩定,當然從細節上,IE10及早期的Safari/WebKit引擎中的某些實現確實不完全相同,但是這些不同可以逐例分析,並且使用更小、更專用的類庫來抹平。重點是:jQuery不是銀彈,不能解決腳本中的所有跨瀏覽器問題,我們可以用更小、更專用且可控的方式來抹平這些瀏覽器的差異。

JavaScript

另一個支持jQuery的常見理由是它彌補了一些JavaScript自身的缺陷,比如不方便的循環遍歷、復雜的DOM訪問等等。使用了第三方類庫(jQuery或Underscore等)之后,循環遍歷變得比原來容易多了。這個理由曾經是正確的,但是現在JavaScript本身也在進化,forEach、Object.keys()等函數的支持也很普遍了。曾經我很依賴$.inArray()函數,但是Array.prototype.indexOf()函數也早就是ECMA Script 5的一部分。類似的例子還有很多,后面我們可以在專題中慢慢探索。

需要馬上拋棄jQuery么?

當然不是,如果jQuery使你的工作變得足夠簡單,如果你足夠熟悉jQuery是如何工作的,接着使用jQuery沒有一點兒問題。這個系列的文章是想告訴讀者,我們可以使用原生的瀏覽器API完成需要的工作,而不需要引入龐大且不完全需要的類庫。另外多了解jQuery本身是如何工作的總是沒有壞處。

譯者注:

The better you understand what you are doing, the better you will do it.
對所做的事情理解越深,你就會做的越好。
——引自 The Singular Secret of the Rockstar Programmer / 編程巨星的唯一秘訣

下一節

拋棄jQuery:DOM API之選擇元素

題圖來自:http://blog.exitquote.com/?p=31


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM