jQuery 1.9/2.0關鍵升級解析

aulara發表於2013-01-31

jQuery官方商標

2012年8月9日,jQuery基金會推出了jQuery 1.8。隨著新式瀏覽器和javascript引擎的興起,大型ajax應用加速普及,重寫Sizzle元素選擇器的舉動標誌著優化革命的開始。僅僅四個月後,在2013年1月15日,jQuery 1.9釋出,退役了一批違反程式碼衛生原則的函式介面,進一步優化速度。自1.8開始,jQuery大大縮短了產品週期,還在用1.4.2的朋友們得抓緊趕上啊!

對已有程式碼影響最大的恐怕是.live()的去世。其實,如果大家關注了jQuery官方部落格,.live()早在1.7版釋出時就被貼上了去除標籤。不幸的是,龐大的現有jQuery資源中有太多程式碼都在呼叫.live(),官方微弱的聲音立馬被廣大的拿來主義使用者所忽略。.live()將動態事件處理函式掛載在文件根元素上,事件被傳遞至事件樹的頂端才被執行,顯然會負面影響程式碼的執行效率。所有處理函式都掛在根元素上也不利於函式管理。替代.live()的.on()可以將動態處理函式掛載在任意元素上,元素一旦被移除,此處理函式將會自動被解除安裝。.on()也替代了.bind()和.delegate(),成為了事件處理的統一工具。按照官方的規劃,未來我們僅需要簡短、強大的.on()。相對應的.off()也同時替代了.die()、.unbind()、.undelegate()。on/off通俗易懂,何樂而不為呢?

另一個大家不情願的變化是$.browser的移除,2012年10月2日釋出的jQuery Mobile 1.2甚至都對瀏覽器嗅探有所依賴。$.browser在清洗名單中呆了整整四年,本次移除受到了強大的社群阻力。包括jQuery的創始人Rezig,不少javascript程式碼衛生倡議者都建議大家進行HTML5功能檢測,以代替瀏覽器嗅探。在HTML中加入條件載入語句

<!--[if lt IE 8]><script src='json2.js'></script><![endif]-->

也不如HTML5功能檢測嚴謹。我在極光賬本的首頁開發中就應用了HTML5功能檢測,提示不支援原生JSON或localStorage的瀏覽器使用者升級瀏覽器。原生的IE8是完全支援JSON模組的,但之前版本沒有支援。假如我使用瀏覽器嗅探提示IE6/7的使用者升級瀏覽器,擁有IE8核心但不支援JSON的搜狗瀏覽器就不會得到提示。您也許不像我那麼憤青,所以我建議您在javascript中為沒有JSON的瀏覽器載入json2.js:

if (!window.JSON) {
    $.getScript('json2.js'); 
}

以相容所有瀏覽器。

萬眾矚目的jQuery 2.0與1.9版的外部介面完全一致,其革命性意義在於去除了IE8及以下IE核心的支援。與Windows 7共同誕生的IE8還未上小學,就已經成為了jQuery的社群公敵。對極光賬本這類記賬網站而言,由於沒有原生canvas支援,IE8的圖表繪製效能令人難以接受。從jQuery 2.0版的開發日程看,它與jQuery Mobile 1.3可能會同時釋出,因為微軟在移動平臺上終於跟上了大部隊的腳步,所有主流智慧手機平臺都支援基本的HTML5。同時,node.js等伺服器端javascript框架無需擔憂瀏覽器相容問題,去除了老IE相容程式碼的jQuery 2.0能優化伺服器指令碼程式。若一切順利,2.0版立馬將在手機瀏覽器和伺服器上大有作為。

jQuery 1.9升級至少是一次清理程式碼的好機會,將所有老語句替換成官方推薦的穩定語句。溫故而知新,還能糾正以前的不良程式碼習慣。不需要支援老舊瀏覽器的朋友更有福了,jQuery 2.0不僅體積更小,而且將成為史上最快的jQuery發行版。

相關文章