精华 ShadowNode: 以更轻量级的方式使用 Node.js
发布于 6 年前 作者 yorkie 12153 次浏览 来自 分享

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

先放个链接:https://github.com/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 仅仅作为胶水层语言!

最后,搭车招个人!坐标杭州西溪,Rokid 公司,招募嵌入式、服务端以及社区增长黑客,共同点都是要热爱 JavaScript 以及 Node.js,简历的话直接去我 GitHub 邮件我就好了~

38 回复

为什么用三星的引擎就比v8快?有依据吗?是做过测试么?亲

来自酷炫的 CNodeMD

貌似三星自己有个lotjs

@zy445566 明显人家说的是三星的引擎因为仅仅支持部分简单的模块以及 CommonJS,所以内存占比会比 v8 引擎少,适用在嵌入式设备场景下,没有提到性能

@zy445566 是启动速度更快 首先是因为v8虚拟内存比较大 另外少了很多初始化和代码检查分析的工作 有在我们自己的开发板上测试 几乎是十倍提速 桌面测试变化不大

@yuu2lee4 这个就是基于iotjs在做的事情不过iotjs最大的问题是虽然支持了很多原生模块 但是却是跟npm分裂开来的 因为在iotjs里是无法正常加载node_modules的 这也是为什么我要独立出来的原因 并且增加了很多对齐nodejs的特性和模块 dbus也是一个与iotjs的不同之处。

同一台服务器上内存占用有对比数据吗?

也就是硬件开发才主shadowNode的主场吗?npm包以后会全兼容吗?

应用场景是嵌入式。做服务器性能是不行的。Jerryscript为了轻量没做太大性能优化

来自酷炫的 CNodeMD

@coolicer 不会全部兼容,一些写得比较臃肿,或者不适合放在嵌入式设备得库或者 API 肯定不支持了~

@yakczh 没有呢 ShadowNode 主要倾向于在桌面端或者嵌入式运行~

赞 Yorkie 大大。

@xadillax 嘻嘻 谢谢死月大大~!

这个东西好玩啊,关注 自豪地采用 CNodeJS ionic

如果这样是不是要有一个查询可以兼容的npm的地方

我这个东西也可以在嵌入式系统上玩,我已经在路由器上用了 https://github.com/zengming00/go-server-js/releases

不知道对es6和async/await之类的新特性支持如何哇 赶脚很厉害的样子 @yorkie

厉害了厉害了,rokie我司也有两三台,没想到也是node栈的,棒棒哒 期待这个shadow-node后续表现,有机会看看能不能提提PR

可以可以,一直在关注js在物联网上的应用

@aojiaotage 欢迎欢迎 今天刚把 MQTT 也变成内置模块了!欢迎各种 Issue/PR !

想要申请你们的开发套件。。。你们的讨论区注册了登录不了 可以购买的。。我的邮箱是yuu2lee4@qq.com

@yuu2lee4 你微信加我吧 ******** 我把你加到我们 Rokid 开发者交流群去~

更新一下,最近花了两天时间把 mbedTLS (一个 OpenSSL的竞品)成功移植到 ShadowNode 上啦,其实主要是为了支持 mqtts 协议,完成后跟 Node.js 的 MQTT.js 对比了一下握手+连接成功的时间,基本上略快于 MQTT.js 的!放在端上完全够用了!

喜欢玩嵌入式,又在行软件开发,所以一直在研究和关注node.js在物联网开发上的应用,有兴趣的朋友可以来一起玩 300717117

另外群公告和群资源 放了几个彩蛋给喜欢Blog的朋友

啥时候发布正式版?

有板子可买么?

@zy445566 脑补太严重了,你可以搜索一下“快”。

作者只说了:

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

@justjavac 是的,我的问题

这个就是朴大一直看好的在嵌入式中用的node?

@zuohuadong 1.0 版本已经在计划中了,主要还缺少一些标配,比如 repl,npm 支持,官方的 N-API 纳入,安全性以及 JS 调用硬件接口,这些都做好之后就能发布正式版了。

@vipzrx 是的,其实我们基于 ShadowNode 已经做了很多嵌入式的尝试了,比如我们在 arm32 / aarch64 平台上的语音交互 OS,上层给开发者的编程语言就是 JS,https://github.com/yodaos-project/yodart 欢迎关注。

@zy445566 我居然回复了一个1年前的文章。😄

回到顶部