jQuery 落幕了!
出品 | OSC開源社區(qū)(ID:oschina2013)
作為差點一統(tǒng)全球門戶網(wǎng)站的前端工具,jQuery 曾在 Web 2.0 初興之時風(fēng)頭無兩,然而隨著前端技術(shù)的不斷演進與瀏覽器底層標(biāo)準(zhǔn)的統(tǒng)一,jQuery 卻逐漸成為一些網(wǎng)站眼中的 “技術(shù)債”。?
日前,英國政府網(wǎng)站 GOV.UK 刪除其網(wǎng)站上所有前端應(yīng)用程序依賴項 jQuery。刪除之后,13 個前端應(yīng)用程序 JavaScript 大小減少了 32 KB(或 31% 到 49%)之間,其他多項性能提升,團隊部分技術(shù)債得以清除。
2019 年,Bootstrap 4.3.1 版本發(fā)布,開發(fā)團隊表示在發(fā)布 v4.3 版本后,將會在開發(fā) Bootstrap 5 的過程中實現(xiàn)一些關(guān)鍵變化,其中就包括放棄使用 jQuery。
2018 年,GitHub 改版重構(gòu)頁面時移除了 jQuery ,GitHub 前端團隊并未使用其它框架來代替 jQuery,而是使用原生 JavaScript。
不過另一方面,根據(jù) BuiltWith 的統(tǒng)計,已知正在使用 jQuery 的實時網(wǎng)站數(shù)量高達(dá)?69,193,395 個,流量排名前百萬的網(wǎng)站中,使用?jQuery 的比例高達(dá) 75.6%。從使用數(shù)據(jù)來看,jQuery 江湖地位仍在,而從呼聲來看,jQuery 已逐漸讓位給后起之秀……

Web 2.0,jQuery 閃亮登場
了解 jQuery 的出場必然繞不開上世紀(jì)的瀏覽器大戰(zhàn)以及 JavaScript 的出現(xiàn)。1994 年,Netscape 網(wǎng)景公司成立,開發(fā)出瀏覽器 Netscape Navigator,并在四個月內(nèi)占據(jù)了四分之三的瀏覽器市場,成為 1990 年代互聯(lián)網(wǎng)的主要瀏覽器。
彼時網(wǎng)景公司的技術(shù)能力以及在技術(shù)上的戰(zhàn)略都領(lǐng)先于市場。網(wǎng)景預(yù)見到,網(wǎng)絡(luò)會變得更加動態(tài),其創(chuàng)始人 Marc Lowell Andreessen 則認(rèn)為 HTML 需要一種膠水語言,也就是腳本語言,可以方便網(wǎng)頁設(shè)計師或者是非專業(yè)的程序員設(shè)計圖片和插件等。
經(jīng)過一番內(nèi)部研究,網(wǎng)景決定發(fā)明一種與 Java 搭配使用的輔助腳本語言。1995 年 5 月,網(wǎng)景工程師設(shè)計出該腳本語言的原型,而網(wǎng)景公司和昇陽電腦公司組成的開發(fā)聯(lián)盟為了讓這個新語言蹭一波 Java 的熱度,在同年 12 月 Netscape Navigator 2.0 Beta 3 中部署時,將其臨時改名為 JavaScript。
JavaScript 出現(xiàn)之后,逐漸受到開發(fā)者追捧。但隨著 Web 2.0 對交互性需求的提高,也對 JavaScript 提出了更高的要求。再加上當(dāng)時的瀏覽器廠商都還忙著跑馬圈地,搶占市場,許多軟件在不同的瀏覽器上無法通用,增加了軟件作者的開發(fā)難度,jQuery 之父 John Resig 便是當(dāng)時飽受折磨的程序員之一。

John Resig
“做 Web 編程時,我非常討厭瀏覽器的 Bug,不同的瀏覽器有不同的 Bug,而且數(shù)量非常多。于是我用 JavaScript 做了 CSS 選擇引擎,之后還做了個動畫引擎,都是自娛自樂。但與此同時我發(fā)現(xiàn)自己不能將制作的一些應(yīng)用放到瀏覽器里。為了將應(yīng)用放到 Firefox 瀏覽器中,我開始制作相關(guān)的 API,以應(yīng)用該 CSS 選擇引擎和動畫引擎,這些最終成為了 jQuery。幾個月后,我將那些應(yīng)用做進 Firefox 里,之后在 IE 里也可以運行。”
John Resig 最早在 2005 年向外界展示了 JavaScript 上一個語法更簡潔的 CSS 選擇器,2006 年的 BarCampNYC 活動上,John Resig 發(fā)布了第二個新版本:jQuery: New Wave JavaScript,“這段代碼徹底改變了讓 Javascript 與 HTML 交互的方式”。
jQuery 的設(shè)計的宗旨是 “write Less,Do More”,許多年后,John 仍將這當(dāng)作是自己的目標(biāo) —— 讓每個人都可以在網(wǎng)頁里寫點什么,并且寫的東西能夠在瀏覽器中順利運行出來。
jQuery 的出現(xiàn)解決當(dāng)時前端開發(fā)人員兩個普遍的煩惱:讓 JavaScript 與 DOM 的交互接口變得簡單,減少開發(fā)過程中的跨瀏覽器問題。最新面試題整理好了,大家可以在Java面試庫小程序在線刷題。
首先是簡化 DOM 操作。HTML DOM 定義了用于 HTML 的一系列標(biāo)準(zhǔn)的對象,以及訪問和處理 HTML 文檔的標(biāo)準(zhǔn)方法。通過 DOM,可以訪問所有的 HTML 元素,連同它們所包含的文本和屬性,并對其中的內(nèi)容進行修改和刪除、創(chuàng)建新的元素等等。在 jQuery 之前,使用 JavaScript 操作 DOM 需要定義一個函數(shù),然后將其綁定到特定 DOM 中的各種 HTML 元素中,這對于日常使用來說非常繁瑣和復(fù)雜。
所以 jQuery 提供了一個選擇器引擎 —— 后來迭代為 Sizzle,它使得開發(fā)者可以在 CSS 中,通過名稱(例如 div)、ID(例如 #myId)、類別(例如 .my-class)等來選擇頁面上的元素,用字符串代替函數(shù)來查找元素,過濾子元素,相較其他引擎速度更快、文件大小更小、易于擴展并且沒有依賴關(guān)系。
另一方面,在純 JavaScript 開發(fā)中,開發(fā)者需要檢查瀏覽器使用何種方式添加事件,然后再做選擇,但是 jQuery 提供了隱藏了不同瀏覽器的 JavaScript 實現(xiàn)之間的一些不兼容性,可以自行檢查瀏覽器需要什么方式,然后使用適當(dāng)?shù)姆绞健?/span>
?
那么,在如此高的使用率下,為什么對 jQuery 會成為一些公司眼中想要刪掉的技術(shù)債呢?
點擊關(guān)注公眾號,Java干貨及時送達(dá)
jQuery 江湖地位不再?
不過,HTML5 在剛出現(xiàn)時并不十分完善,外部采用率較低,給了 jQuery 前期喘息成長的機會。
HTML 5 又經(jīng)歷了一段時間的低迷,在此期間,jQuery 依舊是全球大多數(shù)網(wǎng)站的心頭好。

伴隨著 HTML5 的大范圍應(yīng)用,另一個對 jQuery 造成 “威脅” 的技術(shù)框架 ——MVVM 普及,使得 jQuery 在 DOM 操作上的優(yōu)勢不復(fù)。最新面試題整理好了,大家可以在Java面試庫小程序在線刷題。
由于開發(fā)者們希望 HTML5 開發(fā)的應(yīng)用可以接近原生 App 的效果,便暴露出一些問題,比如大量的 DOM 操作與 DOM API 的頻繁調(diào)用,操作繁瑣,使得代碼變得難以維護,頁面渲染性能降低、速度變慢等。即便 jQuery 能簡化 DOM 操作,但比不上 MVVM 架構(gòu)直接跳過了 DOM 操作。?
MVVM 架構(gòu)由 Model、View、ViewModel 三部分構(gòu)成,Model 層代表數(shù)據(jù)模型,可定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯;View 代表 UI 組件,負(fù)責(zé)將數(shù)據(jù)模型轉(zhuǎn)化成 UI 展現(xiàn),ViewModel 則是一個同步 View 和 Model 的對象。View 和 Model 之間通過 ViewModel 進行交互,并且二者的同步工作完全自動,不需要開發(fā)者手動操作 DOM。
由于 MVVM 結(jié)構(gòu)實現(xiàn)了數(shù)據(jù)與視圖的分離,并通過數(shù)據(jù)來驅(qū)動視圖,封裝 DOM 操作,將數(shù)據(jù)和視圖的綁定變成了自動化的操作,進而把 DOM 操作從業(yè)務(wù)代碼中移除,這就導(dǎo)致 jQuery 在很多場景中失去了用武之地。

MVVM 架構(gòu)圖 (圖片來源:https://zhuanlan.zhihu.com/p/173551040)
符合 MVVM 思維的新一代的前端開發(fā)框架逐漸嶄露頭角,組成現(xiàn)在的前端三大框架:?
2009 年,AngularJS 框架出現(xiàn),后被 Google 收購,最為核心的特性包括 MVVM、模塊化、自動化雙向數(shù)據(jù)綁定、語義化標(biāo)簽、依賴注入等等;
2013 年 5 月,起源于 Facebook、用于構(gòu)建用戶界面的 JavaScript 庫 React 開源;
2013 年,在 Google 工作的尤雨溪受到 Angular 的啟發(fā),發(fā)出了一款輕量框架 Seed,同年 12 月更名為 Vue,2014 年 01 月 24,Vue 正式對外發(fā)布,版本號是 0.8.0。?
有人形容 jQuery 和新框架的對比:
我讓 jQuery 去買瓶醬油,給了他 100 塊錢,這時我們需要告訴他去小賣鋪的路怎么走、怎么跟老板說買啥醬油,買多少錢的醬油,找多少零錢,還得告訴他怎么回來(命令式)。
這時我讓 Vue 去買醬油去了,這時我只需要給他錢,并且告訴他目的地在哪兒,買什么醬油即可,不需要手把手教他(函數(shù)式)。
這就是傳統(tǒng)開發(fā)和現(xiàn)代框架開發(fā)的不同。
來源:https://zhuanlan.zhihu.com/p/49556402
整體而言,隨著 UI 交互標(biāo)準(zhǔn)的提升,瀏覽器解析標(biāo)準(zhǔn)的統(tǒng)一,jQuery 在新功能上很難超過一眾 MVVM 框架。
但 jQuery 目前最大的優(yōu)勢,是相對輕量,只需要面向瀏覽器,而新框架則需要很多工程化的手段,技術(shù)門檻比 jQuery 高。而且 jQuery 組件有一定的歷史底蘊,涵蓋面廣,功能相對全面,在生態(tài)上也比 MVVM 框架更為成熟。
此外,由于 jQuery 目前仍有著較高的市占率,簡單易上手,掌握 jQuery 依舊是許多開發(fā)者的 “基操”。在對 jQuery 的評價中,有這么一句流傳甚廣的話:“任何一個程序員,都可以用三天的時間學(xué)會 jQuery 的基本用法并投入使用”。再加上開發(fā)者的技術(shù)棧更新也存在著一些主觀因素,完全推倒已經(jīng)掌握的技術(shù),對大部分、尤其是本來就不擅長前端領(lǐng)域的開發(fā)者而言很困難。業(yè)內(nèi)人士預(yù)測,jQuery 在未來若干年的主要受眾群體,依舊會是后端開發(fā)者,當(dāng)然這個群體比例會隨著新人的不斷加入而被慢慢沖淡。?
“總體而言,我們今天討論的并非是? jQuery 的地位,而更多應(yīng)該是它存在的意義,對實用者而言,人們更關(guān)心 jQuery 能幫他們解決多少問題,地位已經(jīng)不再是屬于 jQuery 的標(biāo)簽了?!?/span>
參考鏈接:
https://medium.com/mayazine/the-life-and-death-of-jquery-9aca562c80b9
https://www.oschina.net/news/20627/john-resig-talk-about-javascript-and-develop-road
https://www.oschina.net/news/8111/jquery-good-work
https://www.sitepoint.com/interview-john-resig/
https://www.w3.org/wiki/The_history_of_the_Web
https://www.oschina.net/news/64419/html5-rise-up
https://cloud.tencent.com/developer/article/1692480
