V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yorkie
V2EX  ›  Node.js

ShadowNode: 在嵌入式设备上运行你的 Node.js 程序!

  •  2
     
  •   yorkie · 2018-02-27 05:23:42 +08:00 · 6991 次点击
    这是一个创建于 2466 天前的主题,其中的信息可能已经有所发展或是发生改变。

    好久不见,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 邮件我就好了~

    14 条回复    2018-03-04 15:56:51 +08:00
    RyougiShiki
        1
    RyougiShiki  
       2018-02-27 08:22:20 +08:00
    类似 wrtnode、micropython ?玩过一点树莓派,不知道理解的对不对。
    jisibencom
        2
    jisibencom  
       2018-02-27 08:26:21 +08:00
    LZ 加油,我看好你
    circleee
        3
    circleee  
       2018-02-27 08:26:24 +08:00
    那 npm i 以后就是几百兆的问题要是怎么解决呀?
    dtysky
        4
    dtysky  
       2018-02-27 08:42:38 +08:00 via Android
    @circleee 编译打包压缩成单 js233
    yorkie
        5
    yorkie  
    OP
       2018-02-27 14:29:25 +08:00
    @circleee 虽然支持 NPM 的部分模块,不过对于一些核心的都内置了,比如 MQTT/WebSocket,因为底层的解释器内存限制,没有加入 JIT,所以就算打包成单个文件,执行效率也很低,所以 ShadowNode 正确的姿势还是把 JavaScript 做一层胶水层语言~
    yorkie
        6
    yorkie  
    OP
       2018-02-27 14:30:28 +08:00
    @RyougiShiki wrtnode 不是很清楚,不过更像是开源版的 Ruff.io 吧!
    circleee
        7
    circleee  
       2018-02-27 14:38:35 +08:00
    @yorkie 嵌入式方面我也不是很懂,我们现在是 C 写的 CGI 接口,然后和 web 端进行数据交换。 不知道新的 ,现在正确的姿势是什么样子的呢。
    xujialiang
        8
    xujialiang  
       2018-02-27 14:56:43 +08:00
    顶你下~~~~~
    cnnblike
        9
    cnnblike  
       2018-02-27 15:28:59 +08:00 via iPhone
    不懂,我在玩的 stm32 flash 128kB,sram 20kB,在跑 jerryscipt 写东西。你这有可比性吗?
    cnnblike
        10
    cnnblike  
       2018-02-27 15:31:18 +08:00 via iPhone
    建议快点做成 electron 那种,这样缩小体积,肯定一大堆人来用
    zhangdawei
        11
    zhangdawei  
       2018-02-27 15:45:40 +08:00
    嵌入式这三个字的范围太大了
    yorkie
        12
    yorkie  
    OP
       2018-02-27 15:45:50 +08:00
    @cnnblike 好主意~
    yorkie
        13
    yorkie  
    OP
       2018-02-27 15:47:08 +08:00
    @circleee 你们是服务端吧? ShadowNode 主要是用在设备端的场景呢~ 或者是轻量级的脚本嵌入场景!
    wujunze
        14
    wujunze  
       2018-03-04 15:56:51 +08:00
    po 主加油 用过你们的 Rokid 开发板子 挺有意思的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3371 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.