為啥過時(shí)的 jQuery 仍然是市場(chǎng)占有率最高的 JS 庫(kù)?
jQuery 于 2006 年推出,當(dāng)時(shí) Ajax 一詞正炒的火熱。Ajax(Asynchronous JavaScript and XML)與早期 Web 2.0 時(shí)代的其他 JavaScript 技術(shù)一樣,早已不再是開發(fā)者的常用語。
但 jQuery 經(jīng)受住了時(shí)間的考驗(yàn),事實(shí)上直到最近它還在保持逐年增長(zhǎng)。對(duì)此, jQuery 的開發(fā)者 Michał Gołębiowski-Owczarek 分享了他的看法。
名字太長(zhǎng)了,后面簡(jiǎn)稱他 MGO 吧。
MGO 是上個(gè)月 OpenJS 博客上兩篇文章的作者,里面都提到了 jQuery 正在進(jìn)行的 現(xiàn)代化工作。
第一篇文章宣布了 jQuery UI 的新版本 —— 一個(gè)構(gòu)建在 jQuery Core 庫(kù)之上的用戶界面庫(kù)。這將是 該項(xiàng)目的最終版本,這意味著 jQuery UI 后面不再會(huì)有大的迭代了,僅僅會(huì)保持維護(hù)狀態(tài)。
第二篇文章宣布棄用了 jQuery Mobile,這是 jQuery 的另一個(gè)子項(xiàng)目,為移動(dòng)瀏覽器提供 基于 HTML5 的用戶界面系統(tǒng)。
不過,這兩個(gè)項(xiàng)目的結(jié)束都不會(huì)影響 jQuery 現(xiàn)在的主項(xiàng)目:jQuery Core,這意味著它短時(shí)間內(nèi)不會(huì)消失在大眾視野。
WordPress
雖然 jQuery 現(xiàn)在正在被大量使用,但現(xiàn)在的開發(fā)者甚至可能沒有意識(shí)到他們?cè)谑褂? jQuery。那是因?yàn)樗磺度朐诹嗽S多大型開源項(xiàng)目里面 —— 其中最著名的就是 WordPress。
很多 WordPress 的主題和插件都依賴于 jQuery。jQuery 庫(kù)也是當(dāng)今一些最流行的 JavaScript 框架和工具包的基礎(chǔ)層,例如 AngularJS 和 Bootstrap(4.0 及以下版本)。
其實(shí)大多數(shù)網(wǎng)站都不需要復(fù)雜的開發(fā)框架,它們大多是具有一些動(dòng)態(tài)行為的靜態(tài)網(wǎng)站(這種網(wǎng)站通常都會(huì)用 WordPress 編寫),jQuery 在這個(gè)場(chǎng)景下仍然很流行,因?yàn)樗群?jiǎn)單又有效。
而且,在未來的很長(zhǎng)一段時(shí)間,jQuery 還繼續(xù)會(huì)是 WordPress 的一部分,因?yàn)樗茈y在不破壞向后兼容性的情況下將它刪除。
隨著時(shí)間的推移, WordPress 肯定會(huì)逐步更新它的技術(shù),但是這應(yīng)該是一個(gè)漸進(jìn)式的過程。
但是, WordPress 的社區(qū)里已經(jīng)出現(xiàn)了一些反對(duì)的聲音, 在 WordPress 主題中使用 jQuery 的性能影響 就是一個(gè)比較熱門的話題。
GMO還表示:jQuery死了嗎? 這樣的文章已經(jīng)流傳了好幾年了,至少目前在 WordPress 生態(tài)系統(tǒng)中它仍然很活躍。如果誰鼓勵(lì)開發(fā)者們把它替換掉,風(fēng)險(xiǎn)自負(fù)。
jQuery 以前的角色
當(dāng) jQuery 的創(chuàng)造者 John Resig 于2006 年 1 月在 BarCampNYC 發(fā)布它的以一個(gè)版本時(shí),他寫道:
這段代碼徹底改變了讓 Javascript 與 HTML 交互的方式。
他主要指的是 jQuery 使開發(fā)者可以更輕松地操作 DOM。要知道,這是在谷歌瀏覽器逆襲之前,現(xiàn)在微軟臭名昭著的 Internet Explorer 占據(jù)了 85-90% 的瀏覽器市場(chǎng),其中 IE6 占主導(dǎo)地位。即使在當(dāng)時(shí),IE6 也以歷史上最糟糕的瀏覽器而聞名。
Resig 還在2006 年 6 月的一篇帖子中指出了 JavaScript 開發(fā)者在瀏覽器上遇到的一些問題:
JavaScript 中存在許多問題(其中大部分源于瀏覽器不兼容),任何稍微復(fù)雜一點(diǎn)的應(yīng)用程序都需要處理諸如規(guī)范化事件處理、DOM 節(jié)點(diǎn)選擇、動(dòng)畫渲染這些問題。
這也正是 Resig 著手解決的問題。當(dāng)時(shí)“四大”領(lǐng)先的 JavaScript 庫(kù)是 Dojo、MochiKit、Prototype/Scriptaculous 和 Yahoo UI 。
所以基本上,jQuery 的發(fā)明主要是為了幫助開發(fā)者處理當(dāng)時(shí)瀏覽器的不足。
jQuery 現(xiàn)在的角色
在現(xiàn)在各種好用的瀏覽器都在更加符合 Web 標(biāo)準(zhǔn)的時(shí)候,jQuery 現(xiàn)在在 Web 中扮演的角色是啥呢?
此外,JavaScript 標(biāo)準(zhǔn)本身在過去十年中也得到了顯著改進(jìn),尤其是在 2015 年 ECMAScript 6 發(fā)布之后。
現(xiàn)在, React 已成為當(dāng)今最受關(guān)注的 JavaScript 庫(kù)。很多現(xiàn)代框架,尤其是 Next.js,都是建立在 React 之上的。
一些其他流行的框架,例如 Angular 都有自己的庫(kù)生態(tài)系統(tǒng)?,F(xiàn)在的 JavaScript 框架還允許你將 UI 分解為各種組件,從而更輕松地?cái)U(kuò)展應(yīng)用程序。
GMO 談到 Next.js 和 Angular 的時(shí)候提到:
這些框架提供了抽象,可以更輕松地在數(shù)據(jù)和視圖之間進(jìn)行同步。因此他們的用戶不再需要如此頻繁地直接修改或者訪問 DOM,并且通常也不鼓勵(lì)這樣做。在這樣的環(huán)境下,使用 jQuery 沒有多大意義。但這只是整個(gè)網(wǎng)絡(luò)生態(tài)系統(tǒng)的一小部分。
然而 GMO 也承認(rèn) jQuery 可能存在大規(guī)模應(yīng)用程序的性能問題:
這些年來,我們大大提高了 jQuery 的性能,但也存在一些難以應(yīng)對(duì)的問題。其中之一是為了不與瀏覽器沖突,jQuery 不會(huì)修改原生原型 — 就像其他一些庫(kù)所做的那樣(通常后來導(dǎo)致沖突 API 的標(biāo)準(zhǔn)化問題)— 而是用 jQuery 包裝器對(duì)象包裝 DOM 節(jié)點(diǎn)。每個(gè)操作都會(huì)創(chuàng)建一個(gè)新的這種包裝器對(duì)象,在大多數(shù)情況下,這并不重要,但對(duì)于具有大量 DOM 操作的非常復(fù)雜的應(yīng)用程序,這可能會(huì)成為一個(gè)問題。
最后
很明顯,jQuery 不再是開發(fā)者將 JavaScript 功能添加到他們的網(wǎng)站或應(yīng)用程序的最佳方式,尤其是在需要擴(kuò)展的情況下。
GitHub 對(duì) jQuery 的貢獻(xiàn)遠(yuǎn)低于其高峰年(2006 年至 2013 年左右)的事實(shí),這也意味著要使 jQuery 與我們現(xiàn)在的 Web 更加兼容,我們還需要做更多的事情。
不過沒關(guān)系。jQuery 的持續(xù)時(shí)間比大多數(shù)開發(fā)者預(yù)期的要長(zhǎng)得多,因?yàn)樗窃?Web 2.0 時(shí)代開始時(shí)問世的。畢竟,它現(xiàn)在仍然可以完成它所要做的工作,而且它仍然是一個(gè)非常簡(jiǎn)單方便的 JavaScript 庫(kù)。
無論如何,在未來幾年內(nèi),jQuery 還會(huì)嵌入到數(shù)以千萬計(jì)的 WordPress 網(wǎng)站中,它甚至可能比 React 更持久。
對(duì)此你怎么看呢?