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