Node.js 12 发布!来看看有哪些新动向吧

更新日期: 2019-04-24阅读: 2.1k标签: node

Node.js 12 介绍

翻译自 Medium 翻译不完整,如有需要请参考原文。

本文由 Bethany Griggs 以及 Michael Dawson 撰写,并由 Node.js Release Team 和 Technical Steering committee 提供帮助。

今天我们非常激动地发布了 Node.js 12。值得注意的更新以及新功能包括更快速的启动、更好的默认堆内存限制、更新 V8 引擎、TLS、llhttp,新功能包括诊断报告、捆绑的 heap dump 功能、Worker Threads 的升级, N-api 和 ES6 module 支持等。(更多细节参见 LTS strategy).


V8 升级到 7.4

像以往一样,新版本的 V8 JavaScript 引擎带来了性能调整与提升,同时也使得 Node.js 跟上了语言与 runtime 持续提升的步伐。其中的亮点包括:

更多 V8 信息请参见 官方博客


Hello TLS 1.3

Node.js 12 将会包含对 TLS 1.3 的支持,并会将其作为默认的最高支持协议,当然同时也支持通过使用 CLI/NODE_OPTIONS 在需要时禁用。


更合适的默认堆内存限制

此次更新将会使得 JavaScript 的堆内存限制根据当前可用内存进行配置,而不是使用之前为浏览器中 V8 适配的默认值。此前的版本中,除非是手动配置,不然 V8 会使用默认的的方案(32位系统上是 700MB 的限制,64位系统则是 1400MB)。根据可用内存来配置堆内存限制确保了 Node.js 不会因为使用超出可用内存而导致异常退出。

这在处理大型数据集时特别有用。和以前一样,如果默认值不适合您的应用程序,通过设置  max-old-space-size 仍然可以使用不同的限制。


使用 llhttp 替换了默认的 http 解析器

Node.js 12也将把默认解析器切换到 llhttp。llhttp 在 v11.2.0 中首次作为llhttp experimental 引入,在此版本中,llhttp 将不再作为 experimental。


更容易的 Native 模块 —— 持续进行中

Node.js 12 使得构建 Native 模块更加容易。更新使得 Worker threads 与 Native 模块的结合得到了更好的支持,并且 N-API 的 version 4 也将使得用户构建基于自己的线程的异步函数更加方便。更多详情请参考此文章


Worker Threads

Worker Threads 虽然不是新的功能,但是该版本中我们仍可以看到一些新的进展。现在使用 Worker Threads 已经不再需要 flag 了,并且该功能也在不断更新,并朝着摆脱实验性标签的方向稳步前进。虽然借助 Node.js 的单线程事件循环模型,我们已经得到了足够好的性能,但是在某些情况下,使用 Worker Threads 却能带来更好的效果。


诊断报告

Node.js 12 带来了一个新的实验功能:“诊断报告”。这允许您按需或在某些事件发生时生成报告。此报告包含有助于诊断生产中问题的信息,包括崩溃、性能低下、内存泄漏、高CPU使用率、意外错误等。详情参考此文章


Heap Dumps

如果您曾经需要生成 Heap Dumps 来调查内存问题,但是又不得不将诊断模块安装到生产环境中导致运行速度变慢,那么好消息是Node.js 12带来了集成的 Heap Dumps 功能。参考https://github.com/nodejs/node/pull/27133 以及 https://github.com/nodejs/node/pull/26501 获取更多信息。


启动时间优化

在Node.js 11中,我们为 workers 提供了内置代码缓存支持,在加载 js 脚本时,如果引用的库代码已经在主线程上编译过了,那么工作线程不再需要从头编译,而是可以重用主线程生成的 v8 代码缓存来加速编译。类似地,主线程可以重用 workers 生成的缓存。这使得 workers 的创建速度提高了大约 60%

现在在 Node.js 12 中,我们在构建时预先为内置库生成代码缓存,并将其嵌入二进制文件中,因此在最终版本中,主线程可以使用代码缓存来启动任何用 JavaScript 编写的内置库的初始加载。这使得主线程的启动时间加快了约30%。


ES6 Module 支持

Node.js 12 带来了支持 ES6 Module 的最新实验版本。这是迈向正式支持的重要一步,我们希望您尝试一下并给我们反馈。更多细节请看这篇文章


新的编译器和最小化平台

Node.js 和 V8 继续支持更新的 C 与 C++ 功能,并且充分利用了新编译器的优化与安全增强。随着 Node.js 12 的发布,代码库现在要求在除了 macOS 和 Windows 之外的平台上至少有 GCC 6 和 glibc 2.17。Node.js 发布的二进制文件使用了这个新的最小工具链,因此包含了新的编译时性能和安全性增强。

有关构建的详情请参阅 BUILDING.md


链接: https://www.fly63.com/article/detial/3048

关于 Node.js 里 ES6 Modules 的一次更新说明

关于 Node.js 里 ES6 Modules 的一次更新说明,总结来说:CommonJS 与 ES6 Modules 之间的关键不同在于代码什么时候知道一个模块的结构和使用它。

用node.js开发一个可交互的命令行应用

在这个教程中,我们会开发一个命令行应用,它可以接收一个 CSV 格式的用户信息文件,教程的内容大纲:“Hello,World”,处理命令行参数,运行时的用户输入,异步网络会话,美化控制台的输出,封装成 shell 命令,JavaScript 之外

Node启动https服务器

首先你需要生成https证书,可以去付费的网站购买或者找一些免费的网站,可能会是key或者crt或者pem结尾的。不同格式之间可以通过OpenSSL转换

nodejs 异步转同步

nodej项目在微信环境开发,nodejs的异步特效,会导致请求没有完成就执行下面的代码,出现错误。经过多方查找,可以使用async模块来异步转同步,只有前一个function执行callback,下一个才会执行。

基于node服务器的大文件(G级)上传

3G的大文件分1500个2M二进度文件,通post方法发送给node服务,服务器全部接收到文件后,进组装生成你上文件。

为什么要把 JavaScript 放到服务器端上运行?

JavaScript比C的开发门槛要低,尽管服务器端JavaScript存在已经很多年了,但是后端部分一直没有市场,JavaScript在浏览器中有广泛的事件驱动方面的应用,考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因,JavaScript成为了Node的实现语言。

了解node.js事件循环

node.js的第一个基本论点是I / O的性能消耗是很昂贵。因此,使用当前编程技术的最大浪费来自于等待I / O完成。有几种方法可以处理性能影响

Node.js 应用:Koa2 使用 JWT 进行鉴权

在前后端分离的开发中,通过 Restful API 进行数据交互时,如果没有对 API 进行保护,那么别人就可以很容易地获取并调用这些 API 进行操作。那么服务器端要如何进行鉴权呢?

Node.js 前端开发指南

我们经常跟Node.js打交道,即使你是一名前端开发人员 -- npm脚本,webpack配置,gulp任务,程序打包 或 运行测试等。即使你真的不需要深入理解这些任务,但有时候你会感到困惑,会因为缺少Node.js的一些核心概念而以非常奇怪的方式来编码。

happypack提升项目构建速度

运行在 Node.js 之上的 Webpack 是单线程模型的,也就是说 Webpack 需要处理的任务需要一件件挨着做,不能多个事情一起做。happypack把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!