摘要:更好的安全性隨著的發(fā)布,從升級(jí)到了,更安全且更易配置。通過(guò)使用,程序可以減少握手所需時(shí)間來(lái)提升請(qǐng)求性能。提供診斷報(bào)告有一項(xiàng)實(shí)驗(yàn)功能,根據(jù)用戶(hù)需求提供診斷報(bào)告,包括崩潰性能下降內(nèi)存泄露使用高等等。前端精讀幫你篩選靠譜的內(nèi)容。
1. 引言
Node12 發(fā)布有幾個(gè)月了,讓我們跟隨 Nodejs 12 一起看看 Node12 帶來(lái)了哪些改變。
2. 概述Node12 與以往的版本不同,帶來(lái)了許多重大升級(jí),包括更多 V8 特性,Http 解析速度的提升,啟動(dòng)速度的提升,更好的診斷報(bào)告、內(nèi)置堆分析工具,ESM 模塊的更新等。
V8 引擎升級(jí)V8 升級(jí)帶來(lái)了如下幾個(gè)特性:
zero-cost async 堆棧信息 原生支持了 async 堆棧信息,不會(huì)添加額外運(yùn)行時(shí)內(nèi)容。
參數(shù)數(shù)量不匹配時(shí)性能優(yōu)化 即便參數(shù)傳遞多了或少了,現(xiàn)在都幾乎不會(huì)影響 Node 的執(zhí)行速度。
更快的 async async /await 已經(jīng)比 promises 快了兩個(gè) microticks。
更快的 Js 解析速度 網(wǎng)頁(yè)中的 V8 引擎一般花費(fèi) 9.5% 時(shí)間在 JS 解析上,經(jīng)過(guò)解析加速后,現(xiàn)在花費(fèi)在 JS 解析上的時(shí)間降低到平均 7.5%。
可見(jiàn) V8 引擎的升級(jí)不僅給 Node12 帶來(lái)了福音,也給會(huì)一定程度上提升網(wǎng)頁(yè)的運(yùn)行效率。
TLS 1.3 更好的安全性隨著 Node12 的發(fā)布,TLS 從 1.2 升級(jí)到了 1.3,更安全且更易配置。通過(guò)使用 TLS 1.3,Node 程序可以減少 Https 握手所需時(shí)間來(lái)提升請(qǐng)求性能。
默認(rèn)堆被正確配置了以前默認(rèn)堆大小需要通過(guò) -max-old-space-size 設(shè)置,而且默認(rèn)值是一個(gè)固定值,現(xiàn)在這個(gè)默認(rèn)值可以根據(jù)可用內(nèi)存動(dòng)態(tài)分配,這樣當(dāng)內(nèi)存較小時(shí),Node 不會(huì)讓內(nèi)存移除而報(bào)錯(cuò),而是主動(dòng)終止自己的進(jìn)程。
默認(rèn)的 http 解析器變?yōu)?llhttpnodejs 的 http-parser 已經(jīng)非常難以維護(hù)和優(yōu)化了,因此 llhttp 這個(gè)庫(kù),比 http-parser 快 156%,更重要的是,在 Node12 中,將默認(rèn)解析器切換到了 llhttp。
提供診斷報(bào)告Node12 有一項(xiàng)實(shí)驗(yàn)功能,根據(jù)用戶(hù)需求提供診斷報(bào)告,包括崩潰、性能下降、內(nèi)存泄露、CPU 使用高等等。
堆內(nèi)存 dump在以前,如果要將堆內(nèi)存生成 dump 文件,需要在生產(chǎn)環(huán)境安裝額外的模塊,而 Node12 集成了這個(gè)功能。
更好的原生模塊支持C++ 拓展 N-API 升級(jí)到版本 4,同時(shí)一個(gè)原生模塊可以被 C++ 編寫(xiě)并發(fā)布到 npm,就像一個(gè)普通 JS 模塊一樣被引用。不過(guò)要注意一些區(qū)別:
JS 模塊 | 原生拓展 | ||
---|---|---|---|
1. | ... 需要編譯 | 否 | 如果預(yù)編譯了則不用 |
2. | ... 是否可以運(yùn)行在所有平臺(tái) | 是 | 如果預(yù)編譯了則可以 |
3. | ... 是否兼容所有 Node 版本 | 是 | 否 |
4. | ... 會(huì)被加載多次 | 是 | 否 |
5. | ... 如果沒(méi)有明確使用多線(xiàn)程,則線(xiàn)程安全 | 是 | 否 |
6. | ... 可以被銷(xiāo)毀 | 是 | 否 |
--experimental-worker 實(shí)驗(yàn)開(kāi)關(guān)已取消,默認(rèn)支持 worker_threads。
要注意的是,執(zhí)行 CPU 密集型任務(wù)時(shí)適合用 worker(大量計(jì)算),而執(zhí)行 I/O 密集型任務(wù)時(shí),Worker 反而沒(méi)有 Node 內(nèi)置的 I/O 操作性能好(讀寫(xiě)文件)。
啟動(dòng)速度優(yōu)化通過(guò)在構(gòu)建時(shí)提前為內(nèi)置庫(kù)生成代碼緩存,最終使啟動(dòng)時(shí)間加快 30%。
支持 ES6 moduleNode12 對(duì) ES6 module 的支持依然處于實(shí)驗(yàn)階段,需要通過(guò) --experimental-modules 開(kāi)啟。
簡(jiǎn)單來(lái)說(shuō),就是支持了 Import Export 語(yǔ)法,不需要再轉(zhuǎn)成 require 了!如果在 package.json 增加 "type": "module" 的配置,Node 將按照 ES6 module 方式處理。
新的編譯器和平臺(tái)要求由于升級(jí)到新的 V8 引擎以及內(nèi)部改造,因此 Node12 在 Mac 與 Windows 之外的平臺(tái)上,需要至少 GCC6 和 glibc 2.17。
3. 精讀對(duì)于 V8 引擎升級(jí)、TLS 升級(jí)、堆配置自動(dòng)化、http-parser 升級(jí)到 llhttp、啟動(dòng)速度優(yōu)化都屬于被動(dòng)優(yōu)化,代碼無(wú)需改動(dòng),只要升級(jí) Node 版本就可以享受。
支持 ES6 module 這個(gè)特性其實(shí)比較雞肋,畢竟源碼用 Ts 寫(xiě)的話(huà),這些升級(jí)并不會(huì)對(duì)源碼產(chǎn)生影響。
worker_threads 可以被默認(rèn)啟用,就像以前支持 async/await 一樣,會(huì)帶來(lái) Nodejs 多線(xiàn)程更廣泛的使用。
Node12 更新了 V8 引擎,隨著 V8 的更新,很多 ES 新規(guī)范也落地了,比如 Class 成員函數(shù)、私有成員變量等等。
4. 總結(jié)Nodejs 僅有 10 年歷史,但現(xiàn)在越來(lái)越被開(kāi)發(fā)者歡迎,因?yàn)樗梢宰?JS 運(yùn)行在服務(wù)端,是擴(kuò)大 JS 生態(tài)的重要一環(huán)。從 Node 更新歷史中可以看到,性能和語(yǔ)法能力穩(wěn)步提升,一些服務(wù)端環(huán)境需要的診斷報(bào)告、堆棧分析能力都在逐漸完善,社區(qū)上也有 Alinode 與 egg、express、koa 等好用的服務(wù)框架,相對(duì)于前端翻天覆地的變化,對(duì) Node 的評(píng)價(jià)只有一個(gè)字:穩(wěn)。
討論地址是:精讀《Nodejs V12》 · Issue #184 · dt-fe/weekly
如果你想?yún)⑴c討論,請(qǐng) 點(diǎn)擊這里,每周都有新的主題,周末或周一發(fā)布。前端精讀 - 幫你篩選靠譜的內(nèi)容。
關(guān)注 前端精讀微信公眾號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106134.html
摘要:引言本期精讀的文章是如何在使用環(huán)境變量。介紹了開(kāi)發(fā)與生產(chǎn)環(huán)境如何管理環(huán)境變量。本地通過(guò)調(diào)試環(huán)境變量既方便又安全。更多討論討論地址是精讀如何在使用環(huán)境變量如果你想?yún)⑴c討論,請(qǐng)點(diǎn)擊這里,每周都有新的主題,周末或周一發(fā)布。 1 引言 本期精讀的文章是:如何在 nodejs 使用環(huán)境變量。 介紹了開(kāi)發(fā)與生產(chǎn)環(huán)境如何管理環(huán)境變量。 這里環(huán)境變量指的是數(shù)據(jù)庫(kù)密碼等重要數(shù)據(jù),而不是指普通變量傳參。 ...
摘要:舉例來(lái)說(shuō)即便某個(gè)失敗了,也不會(huì)導(dǎo)致的發(fā)生,這樣在不在乎是否有項(xiàng)目失敗,只要拿到都結(jié)束的信號(hào)的場(chǎng)景很有用。對(duì)于則稍有不同只要有子項(xiàng),就會(huì)完成,哪怕第一個(gè)了,而第二個(gè)了,也會(huì),而對(duì)于,這種場(chǎng)景會(huì)直接。 1. 引言 本周精讀的內(nèi)容是:Google I/O 19。 2019 年 Google I/O 介紹了一些激動(dòng)人心的 JS 新特性,這些特性有些已經(jīng)被主流瀏覽器實(shí)現(xiàn),并支持 polyfill...
摘要:引言本期精讀的文章是,探討如何監(jiān)聽(tīng)文件的變化。概述使用使用內(nèi)置函數(shù)似乎可以解決問(wèn)題但你可能會(huì)發(fā)現(xiàn)這個(gè)回調(diào)執(zhí)行有一定延遲,因?yàn)槭峭ㄟ^(guò)輪詢(xún)檢測(cè)文件變化的,它并不能實(shí)時(shí)作出反饋,而且只能監(jiān)聽(tīng)一個(gè)文件,存在效率問(wèn)題。 1 引言 本期精讀的文章是:How to Watch for Files Changes in Node.js,探討如何監(jiān)聽(tīng)文件的變化。 如果想使用現(xiàn)成的庫(kù),推薦 chokida...
摘要:我是這一期的主持人黃子毅本期精讀的文章是。模塊化需要保證全局變量盡量干凈,目前為止的模塊化方案都沒(méi)有很好的做到這一點(diǎn)。精讀本次提出獨(dú)到觀點(diǎn)的同學(xué)有流形,黃子毅,蘇里約,,楊森,淡蒼,留影,精讀由此歸納。 這次是前端精讀期刊與大家第一次正式碰面,我們每周會(huì)精讀并分析若干篇精品好文,試圖討論出結(jié)論性觀點(diǎn)。沒(méi)錯(cuò),我們?cè)噲D通過(guò)觀點(diǎn)的碰撞,爭(zhēng)做無(wú)主觀精品好文的意見(jiàn)領(lǐng)袖。 我是這一期的主持人 ——...
摘要:前端框架總是帶入后端思維,而則是把前端思維帶入了后端運(yùn)維。前端同學(xué)對(duì)應(yīng)該尤為激動(dòng)。而帶來(lái)了進(jìn)一步優(yōu)化的空間。當(dāng)服務(wù)器面臨攻擊重啟磁盤(pán)故障時(shí),打開(kāi)復(fù)雜的工作臺(tái)或登陸后一通操作才能恢復(fù)。 1. 引言 Serverless 是一種 無(wú)服務(wù)器架構(gòu),讓用戶(hù)無(wú)需關(guān)心程序運(yùn)行環(huán)境、資源及數(shù)量,只要將精力 Focus 到業(yè)務(wù)邏輯上的技術(shù)。 現(xiàn)在公司已經(jīng)實(shí)現(xiàn) DevOps 化,正在向 Serverles...
閱讀 1264·2021-10-18 13:32
閱讀 2333·2021-09-24 09:47
閱讀 1323·2021-09-23 11:22
閱讀 2463·2019-08-30 14:06
閱讀 571·2019-08-30 12:48
閱讀 1997·2019-08-30 11:03
閱讀 535·2019-08-29 17:09
閱讀 2462·2019-08-29 14:10