ShadowNode: 以更轻量级的方式使用 Node.js

2,750 阅读2分钟
好久不见,Yorkie 最近做了一个小东西,在此分享给大家!

先放个链接:Rokid/shadow-node

从名字来看,他可不是一个 Node.js 的 C++ Addon,而是可以运行 Node.js 程序的另一个运行时(Runtime),相比 Node.js,具有更快的启动速度以及更小的内存占用、更加节省内存的模块加载方式!原来一个 Node.js 应用需要好几十M的运行时内存,现在可能只需要几兆就可以搞定了,并且拥有更快的启动速度。这也是因为 ShadowNode 不再使用 v8 作为 JavaScript 引擎,而是使用一款三星出品的 JerryScript 在做底层的解释执行!

ShadowNode 目前支持的模块还比较有限,不过一些基础的如 HTTP/NET/DNS/Child Process 等都是支持的,并且除此之外,还默认支持 DBus 通讯方式,对于像 Linux 平台,简直是不要太方便,另外,对于硬件玩家,如果有兴趣移植到自己的开发板上的,也支持了诸如 I2C/ADC/GPIO 等这样的硬件接口,也就是说接入硬件仅仅写写脚本就能把你的硬件玩起来!另外,也可以把他移植到你家里的任意设备上,作为脚本语言使用,也是不错的选择!

在此,我对 ShadowNode 寄予着非常大的希望,目前 Node.js 在嵌入式设备来说,无可避免都是内存占用的大户,之前 Tessel 曾经尝试把 JavaScript代码编译成 Lua 来达到降低内存的目的,也有一些不同的开发板使用像 JerryScript 这样低内存的引擎/虚拟机,然后仅仅支持了部分简单的模块以及 CommonJS,而我完全希望 ShadowNode 将更完全地支持 Node.js/Npm 模块,能够让 JavaScript 开发者能无缝在 Node.js 与 ShadowNode 中切换,尽量少地减少学习的成本!另外,ShadowNode 底层使用纯 C 编写,我们将大部分代码交给 C 来实现,JavaScript 仅仅作为胶水层语言!