Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
譯:瘋狂的技術宅
作者:Michael Dawson & Bethany Griggs
來源:medium
轉發鏈接:https://mp.weixin.qq.com/s/xnkKsjJbkNX4gVgE9cGpUQ
ode.js 14 版本于近日正式發布, 此版本包含的亮點如下:
本文最初發布于 Medium 的 Nodejs 專欄,經原作者授權由 InfoQ 中文站翻譯并分享
Node.js 14 取代 Node.js 13 成為了我們的當前(current)版本。根據發布時間表,Node.js 14 將是未來 6 個月的當前版本,然后在 2020 年 10 月升級為穩定版本 (LTS)。 像往常一樣,企業用戶應該等到 10 月份 Node.js 升級為 LTS 之后,再升級其生產環境中的 Node.js 版本。 不過,現在是使用 Node.js 14 測試應用和嘗試新功能的最佳時機。
提醒一下,Node.js 12 和 Node.js 10 的穩定版本將分別持續維護到 2022 年 4 月和 2021 年 4 月(點擊查看更多 LTS 策略)。
點擊 https://nodejs.org/en/download/current/ 下載新版本,馬上開始學習吧!
在我們開始深入介紹新版本的功能之前,需要提醒一點,那就是新版本中添加的功能會很快被添加到當前穩定版本中去,這就意味著我們在不升級主版本的情況下,也可以在當前穩定版本的小版本更新中使用這些新功能。因此借這個機會我們向大家重點介紹下 Node.js 14 版本中的一些內容,即使這些內容中可能有些部分已經在之前的版本中存在了。
在 Node.js 14 中診斷報告將是一個穩定的功能(在 Node.js 12 中是試驗性的功能)。在推進和建立可用、易用的 Node.js 診斷功能的工作進程中,這是非常重要的一步。其中大部分工作是由 Node.js 診斷工作組推進的。
診斷報告功能使你在生成報告的時候,既可以根據需要生成,也可以通過事件觸發生成。對診斷報告的信息分析可以幫助你診斷各種生產環境問題,包括崩潰、性能慢、內存泄露、CPU 使用率高、未捕獲的異常等。點擊鏈接可以了解到更多關于診斷報告功能的信息。作為一個穩定的特性,啟用診斷報告所需的命令行選項將減少一個,并且用戶在生產環境中可以很容易啟用它。
與往常一樣,新版本的 V8 JavaScript 引擎帶來了性能調整和改進,同時也使 Node.js 保持了在語言和運行時方面持續改進的一致性。V8 的升級還給我們帶來了一個好玩的命名,V8 的版本 8(“ V8 的 V8”)。
新的 JavaScript 功能主要包括:
了解 V8 中新功能的更多信息,請查看 Node.js V8 博客: https://v8.dev/blog 。
該項目一直在致力于幫助管理多個版本之間異步調用上下文的 API。實驗性 Async Hooks API 已在早期的版本中引入了。Async Hook 的關鍵用例之一是異步本地存儲(也稱為連續本地存儲)。已經有許多 npm 模塊提供了 API 來滿足這種需求,但是這些年來,在 Node.js 核心之外維護這些功能一直很棘手;并且在這個項目上社區已經達成共識,認為由 Node.js 提供統一的 API 會更合理,因此 14.x 版本帶來了實驗性的 Async Local storage API (也在 13.10 中添加了該 API)。我們正在尋求社區來嘗試這個 API,并向我們反饋有關抽象模型、API 接口、用例覆蓋范圍、功能穩定性、命名、文檔等方面的信息,這樣我們就可以在以后的版本中將其變成穩定功能。給我們提供反饋的最佳方法是在診斷倉庫的問題區)創建一個問題,并命名為“AsyncLocalStorage API 的經驗報告”。
在 Node.js 的流實現中,此版本中提供了一些標記為 SemVer major(譯者注:SemVer major 表示的是大版本號不兼容)的更改。這些更改旨在提高 Streams API 的一致性,以消除歧義并簡化 Node.js 核心各個部分的行為。例如,http.OutgoingMessage 與 stream.Writable 類似,而 net.Socket 的行為和 stream.Duplex 完全一樣。一個顯著的變化是 autoDestroy 選項現在默認設置為 true,使流在結束后始終調用 _destroy。盡管我們認為這些 SemVer major 更改對大多數程序不會有影響,因為它們只更改了一些邊緣的場景,但如果你嚴重依賴 Stream,最好在 Node.js 14 還是當前版本時進行測試,以便為未來的發布做好準備。 Node.js 14 將會在 2020 年 10 月成為 LTS。
用 Web Assembly 編寫的 Node.js 包為某些使用場景帶來了更好的性能和跨平臺支持的機會。 為了支持這些場景,14.x 版本中包含了 Web Assembly 系統接口( WASI )的實驗性實現。雖然 WASI 對 Node.js v14 來說并不是新事物,但值得注意的是它在簡化原生模塊的體驗上非常有潛力。你可以在 API 文檔中了解有關它的更多信息: https://nodejs.org/api/wasi.html。
其實在 Node.js 13 中,我們就已經移除了實驗模塊警告,不再需要使用 -experimental-modules 標志來處理,但是如果在 Node.js 中使用 EcmaScript Modules 功能,Node.js 13 中仍然會發出實驗功能警告:ESM 模塊導入屬于試驗性功能。
從 Node.js 14 開始,在 Node.js 中使用 ESM 時不再會出現此警告。雖然 Node.js 中的 ESM 實現仍處于試驗階段。根據我們的穩定性指數:“該功能不受語義版本控制規則的約束。向后兼容的更改或刪除可能會在將來的任何版本中發生。”在生產環境中用戶應謹慎使用該功能。
請記住,Node.js 中 ESM 的實現和你所熟悉的并不一樣。大多數轉譯工作流都支持的一些功能是 Node.js ESM 實現不支持的,例如:可選的文件擴展名或者 JSON 模塊。來自轉譯環境的模塊很可能需要一定程度的重構才能在 Node.js 中使用。值得一提的是,我們的許多設計決策都是基于兩個主要目標做出的,即規范合規性和 Web 兼容性。我們相信,當前的實現為編寫 ESM 模塊提供了一個可以長期使用的模型,為走向通用 JavaScript 的目標鋪平了道路。請在文檔中閱讀更多內容。
雖然當前 Node.js 中的 ESM 實現仍處于試驗階段,但我們相信,推進 Node.js 中 ESM 功能到“穩定”狀態是近在咫尺的。消除警告是朝這個方向邁出的重要一步。
Node.js 為很多平臺提供了預構建二進制文件。針對每個主版本,都會對最小工具鏈做適當的評估和提高。
為了支持包認證功能,我們在這次發布時將所有 macOS 的二進制文件轉到了 macOS 10.15(Catalina)下用 Xcode 11 編譯了。由于二進制文件仍在編譯中,以達到支持相應編譯目標的發行要求,我們預計不會對較老版本的 macOS 的 Node.js 用戶產生負面影響。針對 Node.js 14,我們將最低的 macOS 支持版本提高到了 macOS 10.13(High Sierra)。
在基于 Linux 的平臺上,對于 Node.js 14,最低 GCC 版本仍為 GCC 6,但是我們計劃為某些使用 GCC 8 的平臺構建并發布二進制文件。
針對停止維護的 Windows 系統版本,Node.js 14 將不會為其發布版本。
有關更多詳細信息,請參見 Node.js BUILDING.md 。
在進入 “current” 階段的 6 個月中,Node.js 14 將接受大量貢獻到 Node.js 中的新特性,因此在接下來的 6 個月中,此發行版本非常適合進行功能嘗試、項目測試以及升級 Node.js 到最新版本的兼容性測試,同時,請給我們提供反饋,幫助該發行版在 10 月順利過渡到 LTS。
我們想借此機會對所有促成此版本發布的貢獻者和 Node.js 合作者表示非常感謝。我們還要感謝 Node.js 構建工作組 確保我們擁有創建和測試發行版的基礎架構,并對 Node.js 14 的工具鏈進行必要的升級。
你可以點擊這里查看 v14.0.0 版本的完整功能列表。
JQuery 團隊的核心開發者 Timmy Willison 在官網宣布了 jQuery 3.4.0,這距離上個版本 3.3.x 系列的推出已整整過去了一年多。
官方表示這可能是 3.x 分支的最后一個小版本更新,接下來的工作重心將是 jQuery 4.0 大版本的更新。
1、針對 .width 和 .height 的性能改進
在獲取和設置維度時,在某些情況下,這可能會導致布局顛簸,這基本上意味著瀏覽器計算布局的次數超過了必要的次數。我們在IE以外的所有瀏覽器中修復了這個問題,這是無法避免的。
2、支持 nonce 和 noodle
為了支持通過.html和.append等方法添加腳本元素,jQuery將它們分開并附加新的腳本標記來加載和執行遠程內容。在這個過程中,諸如nonce和nomodule被忽略的屬性,但jQuery 3.4.0現在掛在它們上面。
3、針對 Radio 元素新增事件處理程序中的預期狀態
在以下示例中,true第一次單擊該元素時記錄了該日志。我們修復它,以便checked在執行事件處理程序之前更新屬性。
代碼示例:
var $radios=jQuery(".example"); var $firstRadio=$radios.first(); var firstCheckedState=$firstRadio.prop("checked"); $radio.on("click", function() { // true in <3.4.0 console.log($firstRadio.prop("checked")===firstCheckedState); }); $radios.eq(1).click();
4、針對 Object.prototype pollution 問題的小修復
Query 3.4.0在使用時包含一些非預期行為的修復jQuery.extend(true, {}, ...)。如果未過濾的源對象包含可枚舉__proto__屬性,則它可以擴展本機Object.prototype。這個修復包含在jQuery 3.4.0中,但補丁差異存在以修補以前的jQuery版本。
代碼示例:
jQuery.extend(true, {}, JSON.parse('{"__proto__": {"test": true}}') ); console.log( "test" in {} ); // true
5、棄用positional selectors and the sunset of Sizzle
jQuery的基本API是選擇一些內容,然后對所選內容執行某些操作。Sizzle,jQuery中的選擇器引擎,處理上半部分。它是一個快速有效的小引擎,為原生選擇器API querySelectorAll和其他原生JavaScript和CSS選擇器鋪平了道路。現在很多這些選擇器已經進入現代瀏覽器,現在幾乎是時候告別Sizzle了。但是為了在jQuery 4.0中刪除Sizzle,我們還需要刪除我們稱為位置選擇器的東西,它們是非標準選擇器。
具體而言,jQuery的3.4.0被棄用:first,:last,:eq,:even,:odd,:lt,:gt,和:nth。當我們刪除Sizzle時,我們將用一個小包裝器替換它,querySelectorAll如果沒有更大的選擇器引擎,幾乎不可能重新實現這些選擇器。
我們認為這種權衡是值得的。請記住我們仍然會支持的位置方法,如.first,.last和.eq。你可以用位置選擇器做任何事情,你可以用位置方法來做。無論如何,它們表現更好。
如果從jQuery 3.0+升級,應該沒有兼容性問題。
1、Ajax
2、Core
3、CSS
4、外形尺寸
5、事件
精彩評論
每天發布更多新鮮有含量的技術文章、總有一款適合你。
快關注我、把我打包帶走、每天提醒你學習一手技術。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。