前端UI攻城獅 大家該拋棄jQuery了

 

你再也不須要jQuery!

Web工程師太依賴jQuery了,某種意義上說jQuery已經成了JavaScript的同義詞。可是咱們真的須要他麼?或許咱們應該反思一下何時才真的須要jQuery。css

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

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

柺杖?陷阱?

曾幾什麼時候我第一次使用JavaScript開發大型項目,jQuery就同步進入了個人工做,事實上我是從見識了無比強大的jQuery選擇符系統以後纔開始喜歡上Web開發的。我並無深刻學過「真正的」瀏覽器原生API(document.getElementById ?那時以爲看着好醜!),在被迫學習原生API以前,事實上我也不徹底清楚怎麼直接訪問並操做DOM元素——jQuery全都幫我作了。jQuery已經成了個人柺杖,當初用它是由於他能讓我走的更好,可是後來我離開他已經不會走路了git

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

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

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

工程實踐中,不少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的一部分。相似的例子還有不少,後面咱們能夠在專題中慢慢探索。ide

須要立刻拋棄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 / 編程巨星的惟一祕訣

相關文章
相關標籤/搜索