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