我們在使用jQuery的時候,到底在使用什麼?
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吧!所以最後還是會回到那個問題來:用什麼框架,什麼技術棧取決於你當前的團隊實力和專案,沒有誰好誰不好,只有誰合適當前,還有,任何一個框架的產生,都是為了解決某個具體問題的,不能一棍子打死說某個框架不好,也許只是不適合當前的你!
相關文章
- 當我們談論Spring的時候到底在談什麼Spring
- 使用Netty,我們到底在開發些什麼?Netty
- 當我們說外掛系統的時候,我們在說什麼
- 當我們談 Java 併發的時候,你們在談什麼?Java
- 當我們在談論建構函式注入的時候我們在談論什麼函式
- 當你在設定裡修改字型大小的時候,到底在修改什麼
- 當他們說「獨立思考」時,到底在說什麼
- 在JavaScript中什麼時候使用==是正確的?JavaScript
- 到底什麼時候使用mqMQ
- 我們什麼時候才能信賴機器人機器人
- 作為AI產品經理,我們到底在優化什麼?AI優化
- “過時”的SpringMVC我們到底在用什麼?深入分析DispatchServlet原始碼SpringMVCServlet原始碼
- 當我在玩python的時候我玩些什麼Python
- 什麼時候在EJB系統中使用XML (轉)XML
- 當我們在討論遊戲社群時,我們在討論什麼?遊戲
- 在我們使用Redis作為一個LRU快取的時候,怎麼做才能更高效Redis快取
- 智慧音響,什麼時候才能讓我們滿意?
- 什麼時候使用z-index?Index
- 什麼時候使用 Lambda 函式?函式
- 什麼是介面?為什麼使用介面? 什麼時候使用介面?(轉)
- 面試時,面試官到底在考察什麼?面試
- 是時候談談JavaScript物件導向了!(我們什麼時候更需要它)JavaScript物件
- 當我們在聊 RN 時,我們在聊什麼 | 技術點評
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- 在 JavaScript 中,什麼時候使用 Map 或勝過 ObjectJavaScriptObject
- 極限程式設計應該在什麼時候使用?程式設計
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 為什麼我在2019年仍在使用jQuery?jQuery
- 什麼時候 AngularJS 會超越 jQueryAngularJSjQuery
- 我什麼時候應該使用TreeMap 而不是 PriorityQueue?反之亦然?
- VR對老牌遊戲廠商做了什麼 他們到底在恐慌什麼VR遊戲
- GC是什麼?為什麼我們要去使用它GC
- 遊戲的特質:當我們說“play”的時候,究竟在說什麼?遊戲
- 我們使用專案管理時間表有什麼好處?專案管理
- Google到底在幹什麼?Go
- 當我們說一款遊戲“涼涼”時,我們在說什麼?遊戲
- 當談到 GitLab CI 的時候,我們該聊些什麼(上篇)Gitlab
- 當我們討論TCP的連線運輸管理時,我們在說什麼TCP