美國時間1月31日John Resig在jQuery官方博客發表文章,宣布jQuery 1.5正式版已經如期開發完成,可以下載使用。壓縮版本jQuery Minified 29KB,不壓縮版本jQuery Regular(用於閱讀和調試)207KB。由於jQuery已經成為目前最流行的JavaScript庫,得到廣泛的支持,新版本的發布當然非常引人注目。
jQuery創始人John Resig在CSDN TUP活動上演講(相關報導)
另外,微軟和Google也為jQuery 1.5提供了CDN支持,可以直接導入:
微軟:http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.min.js
Google:https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js (發稿時為止尚未上線)
新版本的主要改進可以參見變更日誌:http://api.jquery.com/category/version/1.5/。
John Resig總結了幾點比較引人注目的變化。
1. Ajax重寫
Ajax模塊完全進行了重寫。新增一個jXHR對象,為不同瀏覽器內置的XMLHttpRequest提供了一致的超集。對於XMLHttpRequest之外的傳輸機制,比如JSONP請求,jXHR對象也可以進行處理。(詳情可以參見:jQuery.ajax文檔)
此外,系統的可擴展性大大增強,可以附加各種數據處理器、過濾器和傳輸機制,為開發新的Ajax插件提供了方便。(詳情參見:Ajax擴展文檔)
2. 延遲對象
延遲對象(Deferred Object,jQuery.Deferred對象)是一個可連結的(chainable)實用工具對象,實現了Promise接口,可以在回調隊列中註冊多個回調、調用回調隊列並轉發任何同步/異步函數的成敗狀態。正如Using Deferreds in jQuery 1.5一文中說明的,其結果是在jQuery中能夠將依賴於某個任務(事件)結果的邏輯與任務本身解耦了。這一點在JavaScript中其實並不新鮮,Mochikit和Dojo等已經實現有些日子了。由於jQuery 1.5的Ajax模塊內置使用了延遲對象,因此現在通過jQuery編寫Ajax程序將自動獲得這一功能。
開發人員藉此可以使用無法立即獲得的返回值(如異步Ajax請求的返回結果),而且第一次能夠附加多個事件處理器。
例如,使用了新的jQuery內部Ajax API就可以實現下面的代碼了:
// Assign handlers immediately after making the request,// and remember the jxhr object for this requestvar jxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); });// perform other work here ...// Set another completion function for the request abovejxhr.complete(function(){ alert("second complete"); });
此外,使用jQuery.Deferred還可以開發自己的延遲對象。更多詳情參見:延遲對象文檔。
3. jQuery.sub()
jQuery 1.5提供了一種創建和修改jQuery副本的方式。可以用來添加不向外部公開的方法,或者對jQuery的某些方法進行重新定義以提供新功能,或者提供更好的封裝、避免名稱空間衝突。當然,也可以用來開發插件,但Resig強烈建議在開發插件之前,先考慮jQuery UI widget工廠。
值得注意的是,sub函數並不提供真正的隔離,所有方法、數據、調用仍然依靠jQuery本身來支持。
4. 遍歷性能提高
在新版本中.children(), .pre(), .next()幾個常用的遍歷函數性能有了顯著提高。比如.children()的數據如下所示:
詳細的測試用例和數據可以參考這裡。
5. 內部開發系統
John Resig還特別提到了jQuery團隊內部開發系統的兩點改變:一是伺服器端用Node.js替換了老的Java/Rhino系統,使得團隊可以專注於JavaScript環境的新變化;二是所用的代碼優化程序從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意。
有意思的是,此前UglifyJS開發者曾經公布過自己的測試結果,表明對jQuery的壓縮結果UglifyJS要比Closure略大(都在72KB左右),但運行速度快得多,而且Closure不太安全。看來,這段時間UglifyJS的進展也很快啊。
對了,如果你在使用中發現問題,可以直接到這裡報告bug:http://bugs.jquery.com/。另外,也可以到Reddit上參與討論,別忘了,John Resig同學是那裡的版主,隨時盯著呢。
【延伸閱讀】
jQuery 1.5的改進細節
學習jQuery必須知道常用的幾種方法
Web開發者必知的12款jQuery插件
免費電子書:jQuery Fundamentals(英文)