我們在使用jQuery的時候,到底在使用什麼?

talkingcoder發表於2016-06-17

  jQuery(or Zepto)作為前端標杆,風風光光了許多年,基本上已經成為開發必備的前端框架了。它的成功,主要是因為它讓JavaScript的使用變的簡單,而且通俗易懂,新手可以在不熟練原生JavaScript的前提下,很快就能寫出互動複雜的頁面。當然它的優點還有一大坨,就不細說了。寫這篇文章,是因為在最近一年的開發中,使用了其他一些前端框架後,對jQuery有了一些新的思考。

 在MV*(MVVM)框架誕生之前,我們怎麼用jQuery?

  其實這個問題很大,一千個讀者就有一千個哈姆雷特,不同階段的開發者對jQuery的理解,或是JavaScript的理解程度是不同的。剛入門的前端開發者,可能喜歡直接操作DOM,所有會 $() 滿天飛,似乎懂CSS就懂jQuery選擇器了。.hide()、.show()、.css()、.attr()、.html()會用的很頻繁,.fadeIn()、.fadeOut()、.slideDown()、.slideUp()也經常用來玩一些動畫。不過話說回來,jQuery確實擅長幹這些。一開始會覺得,哇塞,這麼爽,終於可以做互動頁面了,要哪個DOM,我都能輕鬆的獲取到。

  再後來,開始用ajax。jQuery的ajax解決方案確實做的很好用,好用到很多人只知道用jQuery的ajax,而不知道xhr是什麼鬼,更別提寫個原生ajax了。有了DOM,有了資料,再來幾個開源的jQuery外掛,貌似覺得前端開發也就這麼回事了,分分鐘攢出一個互動複雜的頁面來。沒錯,市面上大部分前端開發,可能都是這麼過來的吧,而且這部分人的市場佔有率還不少。

  再後面,互動變得頻繁,而直接操作DOM會耗大量時間來寫一堆重複的業務邏輯程式碼,這時便有了前端模板,比如doT、artTemplate。開發者只用維護資料即可,然後交給模板去處理,用事件委託來監聽事件。這種模式也成了主流,至今很多專案也仍然使用的這種模式。它的好處就是前後端都可以用,而且不用直接操作DOM,省去了大量業務邏輯程式碼,維護起來也很方便,效能也不差。

 在使用Angular時,我們怎麼用jQuery?

  Angular(後面直接寫為ng)的出現,確實改變了前端開發的習慣和認知。現在想來,如果開發者沒使用過jQuery,直接學習ng的話可能理解起來會輕鬆很多,要不然總想著jQuery的那一套,這也是為什麼後端開發人員非常喜歡用ng來開發類似管理後臺的產品,比如TalkingData。當然,我最初在學習ng時,也是脫不開jQuery的束縛,雖然有$http服務,我還是喜歡用jQuery的ajax,然後再$apply,外掛還是喜歡jQuery的,因為用習慣了。ng和jQuery混用,這時我們已經不再操作DOM了,一切都是HTML和資料。但是jQuery是必須的嗎?當然不是,現在ng的外掛已經非常豐富了,能滿足絕大部分的互動需求,即使沒有,也會首選開發ng外掛而非jQuery的了,所以慢慢地jQuery也就不再是專案中不可缺少的了。

 在使用Vue時,我們怎麼用jQuery?

  我使用Vue.js不是很久,但卻非常喜歡這個前端框架,它相比Angular使用更簡單,渲染更高效,文件詳細,門檻很低。在最初開發TalkingCoder時,我是沒有使用jQuery的,我用原生自己封裝了ajax和document.ready,一開始沒有任何問題,因為不涉及到直接操作DOM。後來不得不使用jQuery外掛時,開始想用Zepto代替jQuery,然後將外掛改寫為相容Zepto的,因為Vue是一個新興專案,它的元件還不是非常多,但又不想花太多時間造輪子,所以就妥協了。再後來使用Simditor富文字編輯器時,實在沒辦法,又將Zepto替換為jQuery了。

  最近剛開發完一個專案,算是互動比較複雜的了,深度使用可複用的元件,vue.js可是幫到了大忙。一開始沒有考慮太多,直接就把jQuery加進去了,因為想著可能會用到的嘛。但文章寫到這時,我全域性搜了一下,發現幾乎沒有地方在使用jQuery,程式碼加起來可能就幾百行,然後回頭想一想,好像確實是這樣的,而且使用過的一些,也是可以改寫為vue的。

 總結

  至於React,筆者研究的並不多,所以不知道相關的情況。但就Angular和Vue的使用來看,jQuery雖還在用,但其作用已經很小了,甚至完全可以被取代,如果非要使用,Zepto也是可以替代jQuery的。前端最近幾年發展的很快,各種框架層出不窮,jQuery已經慢慢不再是主流了,它的模式也在被各種新思想顛覆著。所以回到問題,我們在使用jQuery的時候,到底在使用什麼?其實答案很簡單,我們為什麼用jQuery,因為它過去成為了前端開發的標準,不用它行不行,當然行,但你不還得自己搞一套類jQuery的東西嗎,總不能所有都document.getElementById吧!所以最後還是會回到那個問題來:用什麼框架,什麼技術棧取決於你當前的團隊實力和專案,沒有誰好誰不好,只有誰合適當前,還有,任何一個框架的產生,都是為了解決某個具體問題的,不能一棍子打死說某個框架不好,也許只是不適合當前的你!

相關文章