ShadowNode v0.8.0 发布
发布于 3 个月前 作者 yorkie 655 次浏览 来自 分享

Hello,这次发布时隔3个月,我们终于迎来了 ShadowNode v0.8.0 的发布,废话不多说,先来看看这个版本都支持了哪些功能:

  • 支持加载本地 Add-on 模块,为 N-API 做准备;
  • 更稳定的 TLS 和 MQTT 模块(修复了若干崩溃与内存问题);
  • 更稳定的 Child Process 模块;
  • 更稳定的 HTTP/HTTPS 模块;
  • 新增了内置的 WebSocket 模块,支持 W3C 接口及 WebSocket-Node 的接口;
  • 增加了非快照(SNAPSHOT)代码的错误堆栈的函数级支持,无需调试器;
  • Buffer:支持了 readInt16LE、readUInt16LE;
  • 支持了 armhf/openwrt 系统的编译;
  • 支持了树莓派系统的编译(IoT.js 原生支持);
  • TravisCI 上增加了 C/CMake/Shell/Python 以及 ESLint 对代码进行自动检查,并且 ESLint 与 Node.js 规则基本一致;

看完了上面那么一大堆的特性,是不是可以原谅 Delay 2个多月了呢!其实这三个月的工作远不止这些,我们在稳定性上做了很多工作,特别是在 WebSocket、MQTT 以及 TLS 这三个模块上,并且 ShadowNode 本身也在 Rokid 内部积极应用在了我们诸多产品中了。

另外,由 Rokid 官方出品的第一个同时支持 ShadowNode 和 Node.js 的模块也在中间诞生了,那就是:Rokid/node-turen 。这个模块是 Rokid 下一代语音交互引擎的 JavaScript SDK,其实就是一个基于 Socket 的客户端,对于手写过 Redis/MongoDB Driver 的开发者来说,自然是容易实现的了。

还记得上次说到 ShadowNode 还刚上 TravisCI,就在 v0.8.0 发布的昨天,团队的一位小伙伴由于忍受不了每次我都在 Pull Request 抱怨他们的格式问题,于是自己把 clang-format 和 ESLint 也一起加入了 TravisCI 的任务中了。

成也 NPM,败也?

还记得上次在 破壳记 说,要分享一些关于 NPM 的一些看法重塑。

其实故事是这样的,在 Rokid 刚开始的一些产品(1年前)中,代码还是运行在一些高端机型上,再加上创业公司业务驱动的情况下,就很少会考虑到代码体积以及今后如果要适配到低端机型的问题了。

之前野蛮生长的代码,在3个月前的我看来,就是一个噩梦,因为我要将他们从 1-2G RAM 的安卓机器移植到只有 256M 的 Linux 设备上。后面的故事其实大家也知道,我通过 IoT.js 创造了 ShadowNode。但还不止于此,因为一开始我认为只要我把 V8 换成了轻量的 JerryScript,就能完美解决问题,大不了就是一些兼容性的问题。

然而,我完全忽略了 JS 代码的解释性能问题,对于几十M大小的代码,一般的解释器根本跑不起来,我稍微做了一些裁剪的代码,完全运行起来大概还需要到半分钟以上,后来我又尝试把代码用 Webpack 打包成独立的文件,不过效果几乎没有改善,后来我开始慢慢裁剪模块,梳理代码逻辑,最终我放弃了这条路。

我心一横,反正代码逻辑我都熟悉了,就把之前的代码,小心翼翼地重写,当我遇到了需要用 DBus 的时候,我去掉了大部分的 JavaScript 代码,转而用 C 实现,同样地,我用 C 语言重写了 MQTT、WebSocket 这些模块,并且使用完全兼容之前模块的接口。我发现每当我减少几百行甚至几千行的 JS 代码,我就离成功进一步,于是就看到了今天的 ShadowNode。

最终,我们的代码仅仅保留足够少依赖的同时下,完成了重写,执行效率虽然还在继续优化,不过也算是与之前的体验保持相对一致。

我并不想说 NPM 有多么的不好,反而引发我们思考的一个问题是,NPM 在给我们带来 DRY 的同时,怎么保证在中低端引擎以及设备的执行效率,这也许是我们社区应该前进的方向吧!

兴趣使然

想一想,ShadowNode 从第一行代码开始,到现在也有半年了。就我个人而言,我最最最开心的是来自于我和团队小伙伴的一段对话。

背景是聊天聊到了一个特性,然后小伙伴说他帮忙提一个 Pull Request 然后我说:辛苦了!

小伙伴说:没事,主要是兴趣,就没关系。

我想作为一个程序员,最最最开心的也许并不是我能做到多大的并发,我能拥有多少的钱这些,而应该是有一些人不出于任何利益,只是单纯地喜欢你做的东西,并且愿意持续投入。

再立 Flag:v0.9.0

按照惯例,我还是来立一个 Flag,在接下来的 v0.9.0 中,ShadowNode 主要会继续完成:

  • 支持 JerryScript 上的 Handle Scope API 及 N-API;
  • 提供 Debugging/Memstat/CPU Profiling 的工具(Chrome Debug Tools);
  • 另外还会考虑支持 HTTP 2.0 以及 CoAP 协议;

最后还是按照习惯,放一个 ShadowNode 的链接,欢迎 Star 及使用:Rokid/ShadowNode 另外下次的发布系列文章中,我将分享如何在真实的设备上使用 ShadowNode 做硬件编程。

1 回复
回到顶部