nodejs抓取动态网页(JS模块原生拓展1.需要注意哪些区别?|诊断报告)
优采云 发布时间: 2022-01-07 15:00nodejs抓取动态网页(JS模块原生拓展1.需要注意哪些区别?|诊断报告)
提供诊断报告
Node12 有一个实验性的功能,可以根据用户的需求提供诊断报告,包括崩溃、性能下降、内存泄漏、高 CPU 使用率等等。
堆内存转储
以前如果要从堆内存中生成dump文件,需要在生产环境中安装额外的模块,Node12集成了这个功能。
更好的原生模块支持
C++扩展升级到版本4。同时,可以用C++编写一个native模块并发布到npm,就像一个普通的JS模块一样被引用。但是,有一些区别需要注意:
JS 模块原生扩展
1.
… 需要编译
不
如果预编译不要使用它
2.
... 可以在所有平台上运行吗
是的
如果是预编译的,你可以
3.
... 是否兼容所有 Node 版本
是的
不
4.
... 将被多次加载
是的
不
5.
...如果没有明确使用多线程,它是线程安全的
是的
不
6.
......可以被摧毁
是的
不
Worker 正式激活
--experimental-worker 取消了实验性开关,默认支持worker_threads。
需要注意的是,worker 适合执行 CPU 密集型任务(大量计算),但是在执行 I/O 密集型任务时,Worker 不如 Node 内置的 I/O 操作(读和写)文件)。
启动速度优化
通过在构建时提前为内置库生成代码缓存,启动时间最终加快了 30%。
支持 ES6 模块
Node12 对 ES6 模块的支持仍处于实验阶段,需要通过 --experimental-modules 启用。
简单来说就是支持Import Export语法,不需要转换成require!如果在 package.json 中添加了 "type": "module" 配置,Node 会像 ES6 模块一样处理它。
新的编译器和平台要求
由于升级到新的 V8 引擎和内部改造,Node12 在 Mac 和 Windows 以外的平台上至少需要 GCC6 和 glibc 2.17。
3. 精读
V8引擎升级、TLS升级、堆配置自动化、http-parser升级到llhttp、启动速度优化等都是被动优化。代码不需要改,只要升级Node版本,就可以享受了。
支持 ES6 模块特性其实挺鸡肋的。毕竟如果源码是用Ts写的,这些升级不会影响源码。
worker_threads 可以默认开启,就像之前支持 async/await 一样,会带来 Nodejs 多线程的更广泛使用。
Node12 更新了 V8 引擎。随着V8的更新,也实现了很多新的ES规范,比如Class成员函数、私有成员变量等等。
4. 总结
Nodejs只有10年的历史,但它越来越受到开发者的欢迎,因为它允许JS在服务器端运行,这是扩展JS生态系统的重要组成部分。从Node的更新历史可以看出,性能和语法能力都得到了稳步提升。一些服务器环境所需的诊断报告和堆栈分析能力正在逐步完善。社区也有Alinode和egg、express、koa等有用的服务框架。相比前端的翻天覆地的变化,对Node的评价只有一个字:稳定性。
讨论地址:《Nodejs V12》精读·Issue #184·dt-fe/weekly