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