JQuery 4.0震撼發(fā)布:這是復(fù)興還是告別?
jQuery,這個(gè)曾經(jīng)主宰前端開(kāi)發(fā)的JavaScript框架,最近發(fā)布了4.0 beta版本,標(biāo)志著它進(jìn)入了一個(gè)新的階段。盡管新的框架和庫(kù)層出不窮,jQuery憑借其廣泛的功能積累和龐大的用戶基礎(chǔ),在前端領(lǐng)域依然保持著一席之地。
那么,曾經(jīng)的前端霸主jQuery,今天的地位如何呢?本文將分享jQuery 4.0更新的亮點(diǎn),回顧其輝煌的發(fā)展歷程,并討論jQuery的未來(lái)前景。
jQuery 4.0更新亮點(diǎn)
經(jīng)過(guò)慎重準(zhǔn)備,jQuery團(tuán)隊(duì)終于發(fā)布了v4.0的beta版本!這個(gè)版本帶來(lái)了錯(cuò)誤修復(fù)、性能提升和顯著變化,最值得注意的是放棄了對(duì)IE<11的支持,以更好地適應(yīng)現(xiàn)代web標(biāo)準(zhǔn)。jQuery團(tuán)隊(duì)長(zhǎng)期尋求的重大改進(jìn)在jQuery 4.0.0 beta中得以實(shí)現(xiàn),包括清除多余代碼、淘汰已廢棄的API、移除未發(fā)布的內(nèi)部參數(shù),以及簡(jiǎn)化過(guò)于復(fù)雜的“魔法”行為。
讓我們來(lái)看看4.0版本帶來(lái)了哪些更新。
向IE<11說(shuō)再見(jiàn)
隨著技術(shù)的進(jìn)步,jQuery 4.0決定停止支持IE10及更早版本的瀏覽器。我們計(jì)劃在未來(lái)的版本中(jQuery 5.0)進(jìn)一步縮小瀏覽器支持范圍。這次更新移除了專為舊版本IE設(shè)計(jì)的代碼,使代碼庫(kù)更加高效。我們也停止了對(duì)其他過(guò)時(shí)瀏覽器的支持,如Edge Legacy、iOS和Firefox的舊版本,以及原生Android瀏覽器。如果您需要支持這些瀏覽器,可以使用jQuery 3.x。
移除已廢棄的API
多個(gè)版本中已廢棄的幾個(gè)函數(shù)終于在主版本中走到了盡頭。這些函數(shù)要么是為內(nèi)部使用而設(shè)計(jì),要么對(duì)于所有支持的瀏覽器都有原生的替代方案。具體包括:
- jQuery.cssNumber
- jQuery.cssProps
- jQuery.isArray
- jQuery.parseJSON
- jQuery.nodeName
- jQuery.isFunction
- jQuery.isWindow
- jQuery.camelCase
- jQuery.type
- jQuery.now
- jQuery.isNumeric
- jQuery.trim
- jQuery.fx.interval
如果您的代碼使用了這些函數(shù),請(qǐng)務(wù)必更新它,以使用相應(yīng)的原生方法或替代函數(shù),確保與jQuery的最新版本兼容。
其他變化
- 移除特定方法:jQuery 4.0移除了一些設(shè)計(jì)用于內(nèi)部使用的數(shù)組方法,包括push、sort和splice。開(kāi)發(fā)者應(yīng)更新他們的代碼,以使用標(biāo)準(zhǔn)數(shù)組方法代替。
- 事件順序變化:jQuery 4.0中focusin和focusout事件的處理順序發(fā)生了變化,以符合最新的W3C規(guī)范。這可能會(huì)影響依賴舊順序的插件或代碼。新的順序是:blur -> focusout -> focus -> focusin。
- jQuery.ajax添加FormData支持:jQuery.ajax現(xiàn)在可以自動(dòng)處理二進(jìn)制數(shù)據(jù),包括FormData,無(wú)需額外配置。
- 移除JSONP自動(dòng)轉(zhuǎn)換:jQuery 4.0不再自動(dòng)將dataType:“json”和提供的回調(diào)函數(shù)轉(zhuǎn)換為JSONP請(qǐng)求。現(xiàn)在推薦使用CORS進(jìn)行跨域交互,因?yàn)樗趈Query 4.0支持的所有瀏覽器中都有效。這有助于避免在不知情的情況下執(zhí)行來(lái)自遠(yuǎn)程域的代碼。
jQuery源代碼遷移到ES模塊
jQuery主分支的源代碼已從AMD遷移到ES模塊。盡管jQuery的源代碼一直在npm和GitHub上與發(fā)布版本一起提供,但之前沒(méi)有使用RequireJS無(wú)法直接作為模塊導(dǎo)入。現(xiàn)在,jQuery使用Rollup進(jìn)行打包,所有測(cè)試分別在ES模塊上運(yùn)行。
受信任類型和CSP支持
jQuery 4.0現(xiàn)在支持受信任類型,允許使用包裝在TrustedHTML中的HTML作為jQuery操作方法的輸入,同時(shí)遵守內(nèi)容安全策略的require-trusted-types-for指令。
此外,為了避免CSP錯(cuò)誤,jQuery 4.0已將大多數(shù)異步腳本請(qǐng)求從使用XHR改為使用<script>標(biāo)簽。XHR僅在特定情況下繼續(xù)使用(例如使用“headers”選項(xiàng)時(shí))。對(duì)于需要支持IE11的情況,建議使用主構(gòu)建版本或添加原生Promises的polyfill。
更精簡(jiǎn)的構(gòu)建版本
jQuery 4.0的精簡(jiǎn)構(gòu)建版本經(jīng)過(guò)優(yōu)化,移除了Deferreds和Callbacks,進(jìn)一步減小了它們的大小(壓縮到不到20k)。雖然Deferreds提供了一些原生Promises沒(méi)有的功能,但在大多數(shù)情況下,可以代替使用原生Promises。對(duì)于需要支持IE11的用戶,建議使用主構(gòu)建版本。
jQuery發(fā)展歷史
什么是jQuery?
jQuery是一個(gè)快速、簡(jiǎn)潔的JavaScript框架。它最初發(fā)布是為了簡(jiǎn)化JavaScript編程并提供跨瀏覽器兼容性。在web開(kāi)發(fā)的早期,不同瀏覽器在JavaScript實(shí)現(xiàn)上有顯著差異,這使得編寫跨瀏覽器的JavaScript代碼非常困難。jQuery旨在通過(guò)提供一致的API,使JavaScript編程簡(jiǎn)化,更容易開(kāi)發(fā)跨瀏覽器代碼。
jQuery的出現(xiàn)
jQuery的歷史可以追溯到2005年,當(dāng)時(shí)John Resig開(kāi)始開(kāi)發(fā)一個(gè)名為“Behaviour”的庫(kù),旨在簡(jiǎn)化JavaScript編程。然而,他發(fā)現(xiàn)這個(gè)庫(kù)太大且過(guò)于復(fù)雜,于是決定開(kāi)發(fā)一個(gè)更輕巧、用戶友好的JavaScript庫(kù),這就是jQuery的原型。
2006年1月,John Resig宣布發(fā)布了他的庫(kù),命名為jQuery。初始版本已經(jīng)支持CSS選擇器、事件處理和AJAX交互,其獨(dú)特的鏈?zhǔn)秸Z(yǔ)法和簡(jiǎn)潔的多用途接口受到了廣泛贊譽(yù)。隨著版本的迭代,jQuery逐漸增加了對(duì)動(dòng)畫(huà)效果、插件擴(kuò)展的支持,使得開(kāi)發(fā)者在web開(kāi)發(fā)中使用JavaScript變得更加容易。
jQuery的影響
jQuery對(duì)web開(kāi)發(fā)產(chǎn)生了重大影響,使得JavaScript編程對(duì)開(kāi)發(fā)者來(lái)說(shuō)更加可接近,并顯著提高了跨瀏覽器的兼容性。許多網(wǎng)站和web應(yīng)用仍然依賴于jQuery,因?yàn)樗囊子眯浴V泛的插件生態(tài)系統(tǒng)和對(duì)老舊瀏覽器的兼容性。
jQuery還有相關(guān)性嗎?
隨著React、Angular和Vue.js等現(xiàn)代JavaScript框架和庫(kù)的崛起,一些開(kāi)發(fā)者質(zhì)疑jQuery在現(xiàn)代web開(kāi)發(fā)中的相關(guān)性。然而,出于幾個(gè)原因,jQuery在web開(kāi)發(fā)中仍然有一席之地:
- 遺留瀏覽器支持:許多網(wǎng)站和web應(yīng)用仍需要支持如IE11這樣的老舊瀏覽器,這些瀏覽器缺乏對(duì)現(xiàn)代JavaScript特性的支持。jQuery提供了一個(gè)橋梁,允許開(kāi)發(fā)者編寫在廣泛的瀏覽器版本中都能工作的代碼。
- 易用性:jQuery的簡(jiǎn)潔語(yǔ)法和廣泛的文檔使得開(kāi)發(fā)者易于學(xué)習(xí)和使用。對(duì)于web開(kāi)發(fā)新手或那些更喜歡簡(jiǎn)單直接的JavaScript編程方法的開(kāi)發(fā)者來(lái)說(shuō),jQuery仍然是一個(gè)吸引人的選擇。
- 插件生態(tài)系統(tǒng):jQuery的廣泛插件生態(tài)系統(tǒng)為開(kāi)發(fā)者提供了大量預(yù)構(gòu)建的解決方案,用于常見(jiàn)的web開(kāi)發(fā)任務(wù),如表單驗(yàn)證、圖片滑塊和AJAX交互。這個(gè)生態(tài)系統(tǒng)通過(guò)允許開(kāi)發(fā)者利用現(xiàn)有解決方案而不是重新發(fā)明輪子,節(jié)省了開(kāi)發(fā)者的時(shí)間和精力。
- 與其他框架的集成:許多現(xiàn)代JavaScript框架和庫(kù),如React和Vue.js,可以與jQuery共存,允許開(kāi)發(fā)者在利用其他框架的優(yōu)勢(shì)進(jìn)行應(yīng)用開(kāi)發(fā)的同時(shí),使用jQuery完成特定任務(wù)。這種靈活性使得jQuery即使在現(xiàn)代web開(kāi)發(fā)環(huán)境中也是開(kāi)發(fā)者工具箱中的寶貴工具。
盡管jQuery可能不再是前端開(kāi)發(fā)領(lǐng)域的主導(dǎo)力量,但它在現(xiàn)代web開(kāi)發(fā)中仍然有其位置,因?yàn)樗鼘?duì)遺留瀏覽器的支持、易用性、廣泛的插件生態(tài)系統(tǒng)和與其他框架的集成。隨著jQuery 4.0 beta的發(fā)布,jQuery團(tuán)隊(duì)展示了他們保持jQuery在不斷發(fā)展的web開(kāi)發(fā)生態(tài)系統(tǒng)中相關(guān)性的承諾。那么,你認(rèn)為jQuery還有存在的意義嗎?