日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NodeJs 最近各版本特性汇总

發布時間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NodeJs 最近各版本特性汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(預測未來最好的方法就是把它創造出來——尼葛洛龐帝)

NodeJs

官方鏈接
github鏈接
V8鏈接
Node.js發布于2009年5月,由Ryan Dahl開發,是一個基于Chrome V8引擎的JavaScript運行環境,使用了一個事件驅動、非阻塞式I/O模型, [1] 讓JavaScript 運行在服務端的開發平臺,它讓JavaScript成為與PHP、Python、Perl、Ruby等服務端語言平起平坐的腳本語言。 [2]
Node.js對一些特殊用例進行優化,提供替代的API,使得V8在非瀏覽器環境下運行得更好,V8引擎執行Javascript的速度非???#xff0c;性能非常好,基于Chrome JavaScript運行時建立的平臺, 用于方便地搭建響應速度快、易于擴展的網絡應用

接下來整理的是開發中常用的特性,一些作者認為不常用的可能會不記錄或者記錄的不詳細

NodeJs的發布規則

  • CURRENT:指代最新的 Node.js 版本系列。
  • Active:指正在積極維護和升級的版本系列,包括向后移植非破壞性功能和改進,解決錯誤以及修補安全漏洞。
  • Maintenance:這是一個維護的 LTS 版本系列,直到它的生命周期終止,只會在短時間內收到錯誤修復和安全補丁。
  • LTS:是Long-Term Support 的縮寫,代表 Node.js 長期支持的版本(版本號為復數)。
  • EOL:EOL 是 End of Life 的首字母縮寫,進入到 EOL 時間線的版本,將不在維護。

讓我們看下 Node.js版本的生命周期是怎么樣的?首先要知道每年的 4 月、10 月分別發布偶數、奇數版本,下面是過程說明:

最近的一個偶數版本在 4 月份發布之后會持續 6 個月。 待 10 月份會發布一個奇數版本,最近的偶數版本會進入 Active LTS版本。持續時間為 18 個月,這期間幾乎不會有不兼容的大功能更新,開發者也可以放心升級到 Active LTS 版本。
18 個月的Active LTS 版本到期后,會進入 Maintenance LTS 版本,也就是進入維護期,時間為 12
個月,在這期間僅進行安全、Bug 更新。 一旦 Maintenance LTS 版本 12 個月的時間已到就會進入 EOL
版本,正式退出歷史舞臺。
其中偶數版本會持續維護18個月,而奇數版本指揮維護8個月。
生命周期圖

20.0.0

2023-04-18發布

1. 權限模型

Node.js 現在有一個名為權限模型的實驗性功能。它允許開發人員在程序執行期間限制對特定資源的訪問,例如文件系統操作、子進程生成和工作線程創建。API 存在于一個標志后面–experimental-permission,啟用后將限制對所有可用權限的訪問。通過使用此功能,開發人員可以防止他們的應用程序訪問或修改敏感數據或運行可能有害的代碼。

  • 使用–allow-fs-read和–allow-fs-write限制對文件讀寫系統的訪問
  • 使用–allow-child-process限制訪問 child_process
  • 使用–allow-worker限制訪問 worker_threads
  • 使用–no-addons制對本機插件的訪問

2. 自定義 ESM 加載程序掛鉤在專用線程上運行

通過加載程序 ( ) 提供的 ESM 掛鉤–experimental-loader=foo.mjs現在在與主線程隔離的專用線程中運行。這為加載程序提供了一個單獨的范圍,并確保加載程序和應用程序代碼之間沒有交叉污染。

3. import.meta.resolve()

為了與瀏覽器行為保持一致,此函數現在同步返回。盡管如此,用戶加載resolve程序掛鉤仍然可以定義為異步函數(或同步函數,如果作者愿意的話)。即使resolve加載了異步掛鉤,import.meta.resolve仍會同步返回應用程序代碼。

4. V8 11.3

V8 引擎更新到版本 11.3,它是 Chromium 113 的一部分。這個版本包括 JavaScript API 的三個新特性

  • String.prototype.isWellFormed 和 toWellFormed
    isWellFormed用于檢查這個字符串是否是一個合法的 Unicode,而toWellFormed則會將一個字符串轉換為 Unicode。
通過復制改變 Array 和 TypedArray 的方法
現有的Array.prototype和TypedArray.prototype的函數會直接修改接收的數組。而新函數會返回接收的數組的修改副本,并將原始數組保持不變。這些新函數在數據不可變的編程風格中很有用。
可調整大小的 ArrayBuffer 和可增長的 SharedArrayBuffer
帶有集合符號的 RegExp v 標志 + 字符串的屬性
WebAssembly 尾調用

5. 穩定的測試運行器

最近對 Node.js 版本 20 的更新包括對 test_runner 模塊的重要更改。在最近的更新后,該模塊已被標記為穩定。以前,test_runner 模塊是實驗性的,但這次更改標志著它是一個可以用于生產的穩定模塊。
它主要用來編寫并運行測試文件,類似mock等測試組件包

  • describe/it/test函數,以及測試文件的鉤子。
  • mock 數據。
  • 監聽文件變化模式(watch mode)。
  • node --test支持并行運行多個測試文件。
import { test, mock } from "node:test"; import assert from "node:assert"; import fs from "node:fs";mock.method(fs, "readFile", async () => "Hello ZY"); test("synchronous passing test", async (t) => {// This test passes because it does not throw an exception.assert.strictEqual(await fs.readFile("zy.txt"), "Hello ZY"); });

6. Ada 2.0

Node.js v20 附帶了最新版本的 URL 解析器 Ada。此更新為 URL 解析帶來了顯著的性能改進,包括增強url.domainToASCII了.url.domainToUnicodenode:url

Ada 2.0 已集成到 Node.js 代碼庫中,確保應用程序的所有部分都能從改進的性能中受益。此外,Ada 2.0 比其前身 Ada 1.0.4 具有顯著的性能提升,同時還消除了對 URL 主機名解析的 ICU 要求。

19.0.0

2022-10-18發布

1. HTTP(S)/1.1 KeepAlive 默認

從此版本開始,Node.jskeepAlive默認設置為 true。這意味著任何傳出的 HTTP(s) 連接都將自動使用 HTTP 1.1 Keep-Alive。默認等待時間為 5 秒。啟用 keep-alive 將提供更好的吞吐量,因為默認情況下會重用連接。

此外,代理現在能夠解析Keep-Alive服務器可能發送的響應。此標頭指示客戶端保持連接的程度。另一方面,Node.js HTTP 服務器現在將在調用時自動斷開空閑客戶端(使用 HTTP Keep-Alive 重用連接)close()。

默認情況下,Node.js HTTP(S)/1.1 請求可能會體驗到更好的吞吐量/性能。

2. 刪除了 DTrace/SystemTap/ETW 支持

3. V8 10.7

V8 引擎更新到 10.7 版,它是 Chromium 107 的一部分。該版本包括 JavaScript API 的新功能:Intl.NumberFormat.

Intl.NumberFormatv3 API 是一個新的TC39 ECMA402 第 3 階段提案, 擴展了現有的Intl.NumberFormat.

4. llhttp 8.1.0

llhttp 已經更新到 8.1.0 版本??偟膩碚f,這個版本對 llhttp API 帶來了許多更新,引入了新的回調并允許所有回調都可以暫停。

18.0.0

2022-04-19發布

1. fetch(實驗性)

默認情況下,全局范圍內提供了一個實驗性的獲取 API。該實現基于undici,一個由項目貢獻者為 Node.js 編寫的 HTTP/1.1 客戶端。

const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) {const data = await res.json();console.log(data); }

通過此添加,可以使用以下全局變量:fetch, FormData, Headers, Request, Response
使用–no-experimental-fetch命令行標志禁用此 API

2. HTTP 超時

server.headersTimeout這限制了解析器等待接收完整 HTTP 標頭的時間,現在60000默認設置為(60 秒)。

server.requestTimeout300000設置從客戶端接收整個請求的超時值(以毫秒為單位)現在默認設置為(5 分鐘)。

如果這些超時到期,服務器將以狀態 408 響應而不將請求轉發給請求偵聽器,然后關閉連接。

兩個超時都必須設置為非零值,以防止在服務器部署前沒有反向代理的情況下發生潛在的拒絕服務攻擊。

3. Test Runner 模塊(實驗性的)

該node:test模塊有助于創建以 TAP 格式報告結果的 JavaScript 測試。

import test from 'node:test';

該模塊僅在該方案下可用node:
以下是具有兩個子測試的父測試的示例實現:

test('top level test', async (t) => {await t.test('subtest 1', (t) => {assert.strictEqual(1, 1);});await t.test('subtest 2', (t) => {assert.strictEqual(2, 2);}); });

4. 工具鏈和編譯器升級

5. V8 10.1

V8 引擎更新到 10.1 版本,它是 Chromium 101 的一部分。與 Node.js 17.9.0 中包含的版本相比,包括以下新特性

findLast數組findLastIndex方法
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}]; inputArray.findLast((element) => element.v % 2 === 0); // → {v:4} inputArray.findLast((element) => element.v % 7 === 0); // → undefined inputArray.findLastIndex((element) => element.v % 2 === 0); // → 3 inputArray.findLastIndex((element) => element.v % 7 === 0); // → -1
Intl.LocaleAPI的改進。
Intl.supportedValuesOf
改進了類字段和私有類方法的性能(它們的初始化現在與普通屬性存儲一樣快)

17.0.0

2021-10-19發布

1. OpenSSL 3.0

2. V8 9.5

V8 JavaScript 引擎更新到 V8 9.5。此版本附帶Intl.DisplayNamesAPI 的其他受支持類型和timeZoneNameAPI 中的擴展選項Intl.DateTimeFormat

3. Readline 承諾 API

該模塊提供了一個接口,用于一次一行地readline從 Readable 流(例如 )中讀取數據。process.stdin

以下簡單示例說明了該readline模塊的基本用法

import * as readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'process';const rl = readline.createInterface({ input, output });const answer = await rl.question('What do you think of Node.js? ');console.log(`Thank you for your valuable feedback: ${answer}`);rl.close();

16.0.0

2021-04-21發布

1. 穩定Timers Promises API

Timers Promises API 提供了一組替代的計時器函數,它們返回 Promise 對象。在 Node.js v15.0.0 中添加,在此版本中,它們從實驗狀態升級到穩定狀態。

import { setTimeout } from 'timers/promises';async function run() {const res = await setTimeout(3000, 'fullFilledValue');console.log(`Get result=>${res} after 3s`); }run(); // 3s后輸出:Get result=>fullFilledValue after 3s

2. 工具鏈和編譯器升級

3. V8 JavaScript 引擎更新到 V8 9.0,包括性能調整和改進

這次V8的升級帶來了ECMAScript RegExp比對索引功能,能提供字符串的開始與結束索引。當正則表達式帶有/d標簽時,可以通過indices屬性訪問到索引數組。

14.0.0

2020-04-21發布

1. V8 8.1

可選鏈接
Nullish 合并
Intl.DisplayNames
為 Intl.DateTimeFormat 啟用 calendar 和 numberingSystem 選項

2. 實驗性異步本地存儲 API

3. 強化流 API

13.0.0

2019-10-22發布

1. 斷言

如果驗證函數傳遞給assert.throws()或assert.rejects() 返回的值不是true,則將拋出斷言錯誤而不是原始錯誤以突出顯示編程錯誤(Ruben Bridgewater)

2. 構建

Node.js 版本現在使用默認的 full-icu 支持構建。這意味著現在包含了 ICU 支持的所有語言環境,并且與國際相關的 API 可能會返回與以前不同的值(Richard Lau)

3. V8 7.8

新增對象解構、內存使用和 WebAssembly 啟動時間的性能改進

12.0.0

2019-04-29發布

1. V8 7.4

在V8 7.4中,對于開發人員來說最重要的新特性是預計計算屬性,可以讓開發人員更方便地通過表達式來定義對象屬性,同時引入了更多的原型方法。此外,V8 7.4還實現了大量的內存管理和性能改進,這將使得Node.js 12的性能更加穩定和可靠。

2. 更快的ES模塊加載

隨著Web應用程序變得越來越龐大,加載和解析JavaScript模塊的速度越來越成為Web開發的瓶頸。為了解決這個問題,Node.js 12引入了較新的V8版本的快速對象存儲訪問,從而使得ES模塊的加載和解析速度更快,可實現更快的Web應用程序加載時間和啟動時間。

3. HTTP/2的完整支持

HTTP/2作為HTTP協議的下一代,擁有比HTTP 1.x更快、更安全的數據傳輸速度。Node.js 12支持HTTP/2的完整支持,包括對HTTP/2流的完整流控、過程化二進制協議的解碼和對H2C升級的支持。同樣,Node.js 12還支持ALPN協議,在HTTPS請求中使用HTTP/2。

11.0.0

2018-10-23發布

1. V8 7.0

2. fs

  • fs.read()方法現在需要回調
  • 以前棄用的fs.SyncWriteStream實用程序已被刪除
  • 3. console

  • console.countReset()如果重置的計時器不存在,將發出警告
  • console.time()如果計時器已經存在,將不再重置它
  • 10.0.0

    2018-04-24發布

    1. 斷言

  • 添加了和assert.rejects()方法assert.doesNotReject()以使用異步函數
  • assert.throws()接受一個對象來與錯誤進行比較
  • 2. 異步鉤子

  • 舊的實驗性 async_hooks API 已被刪除
  • 3. Buffer

  • 使用目錄new Buffer()和Buffer()外部目錄node_modules現在將發出運行時棄用警告
  • Buffer.isEncoding()現在返回undefined虛假值,包括空字符串
  • Buffer.fill()如果嘗試填充一個空的Buffer
  • noAssert參數已從所有Buffer讀寫函數中刪除
  • 4. V8 6.6

    5. 發送事件

    該EventEmitter.prototype.off()方法已添加為 的別名EventEmitter.prototype.removeListener()

    6. fs

  • APIfs/promises提供了函數的實驗性承諾版本fs
  • 現在會同步拋出無效路徑錯誤
  • 該fs.readFile()方法現在對讀取進行分區以避免線程池耗盡
  • 7. node10x后續版本開放了工作線程

    工作線程主要用于解決node計算類的業務問題。但需要注意的是,對io類操作沒有作用。

    總結

    以上是生活随笔為你收集整理的NodeJs 最近各版本特性汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。