Node.js12Introduction翻译自Medium翻译不全,如有需要请参考原文。本文由BethanyGriggs和MichaelDawson撰写,Node.js发布团队和技术指导委员会对此做出了贡献。今天,我们非常高兴地宣布推出Node.js12。值得注意的更新和新功能包括更快的启动、更好的默认堆内存限制、更新的V8引擎、TLS、llhttp,新功能包括诊断报告、捆绑堆转储功能、工作线程升级、N-API和ES6模块支持等(更多细节参见LTS策略)。V8升级到7.4与之前一样,新版本的V8JavaScript引擎带来了性能调整和改进,也让Node.js能够跟上语言和运行时的不断改进。亮点包括:异步调用堆栈跟踪参数不匹配调用速度更快await更快Javascript解析更多V8信息请参考官方博客HelloTLS1.3Node.js12将包含对TLS1.3的支持,并将其作为默认的最高支持协议,当然也支持在需要时使用CLI/NODE_OPTIONS禁用它。更好的默认堆限制此更新将使JavaScript的堆限制基于当前可用内存配置,而不是使用以前在浏览器中适应V8的默认值。在以前的版本中,除非手动配置,否则V8将使用默认方案(32位系统限制为700MB,64位系统限制为1400MB)。根据可用内存配置堆内存限制可确保Node.js不会因使用量超过可用内存而中止。这在处理大型数据集时特别有用。和以前一样,如果默认值不适合您的应用程序,仍然可以通过设置max-old-space-size来使用不同的限制。用llhttpNode.js12替换默认的http解析器也会将默认解析器切换为llhttp。llhttp在v11.2.0中首次作为llhttp实验性引入,在这个版本中,llhttp将不再是实验性的。更简单的本机模块-正在进行的Node.js12使构建本机模块更加容易。此次更新使得Worker线程和Native模块的组合得到更好的支持,N-API的版本4也将使用户更容易基于自己的线程构建异步函数。请参阅本文了解更多详情。WorkerThreads虽然WorkerThreads并不是一个新特性,但是我们还是可以看到这个版本有一些新的进步。使用工作线程不再需要该标志,并且该功能正在不断更新,并朝着摆脱实验性标志的方向稳步推进。虽然我们已经通过Node.js的单线程事件循环模型实现了足够好的性能,但在某些情况下,使用WorkerThreads可以带来更好的结果。诊断报告Node.js12带来了一个新的实验性功能:“诊断报告”。这允许您根据需要或在特定事件发生时生成报告。此报告包含有助于诊断生产中问题的信息,包括崩溃、性能不佳、内存泄漏、CPU使用率高、意外错误等。有关详细信息,请参阅本文。堆转储如果您曾经需要生成堆转储来调查内存问题,但不得不在您的生产环境中安装诊断模块,这会减慢速度,那么好消息是Node.js12带来了集成的堆转储功能。有关详细信息,请参阅https://github.com/nodejs/node/pull/27133和https://github.com/nodejs/node/pull/26501。启动时间优化在Node.js11中,我们为工作人员提供内置代码缓存支持。在加载js脚本时,如果引用的库代码已经在主线程编译完成,工作线程就不再需要从头开始编译,并且可以复用主线程生成的v8代码缓存,加快编译速度。同样,主线程可以重用worker生成的缓存。这使得worker的创建速度提高了大约60%。现在在Node.js12中,我们在构建时为内置库预先生成一个代码缓存,并将其嵌入二进制文件中,因此在最终版本中,主线程可以使用代码缓存来启动任何内置库JavaScript初始加载。这导致主线程的启动时间加快了约30%。ES6模块支持Node.js12带来了支持ES6模块的最新实验版本。这是迈向官方支持的重要一步,我们希望您尝试一下并给我们反馈。有关更多详细信息,请参阅本文。新的编译器和缩小平台Node.js和V8继续支持更新的C和C++功能,并利用新的编译器优化和安全增强功能。随着Node.js12的发布,代码库现在在macOS和Windows以外的平台上至少需要GCC6和glibc2.17。Node.js附带的二进制文件使用这个新的最小工具链,因此包括新的编译时性能和安全增强功能。有关构建的详细信息,请参见BUILDING.md。--------结束--------
