Hello,此次发布时隔3个月,咱们终于迎来了 ShadowNode v0.8.0 的发布,废话很少说,先来看看这个版本都支持了哪些功能:node
看完了上面那么一大堆的特性,是否是能够原谅 Delay 2个多月了呢!其实这三个月的工做远不止这些,咱们在稳定性上作了不少工做,特别是在 WebSocket、MQTT 以及 TLS 这三个模块上,而且 ShadowNode 自己也在 Rokid 内部积极应用在了咱们诸多产品中了。git
另外,由 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 的一些见解重塑。github
其实故事是这样的,在 Rokid 刚开始的一些产品(1年前)中,代码仍是运行在一些高端机型上,再加上创业公司业务驱动的状况下,就不多会考虑到代码体积以及从此若是要适配到低端机型的问题了。编程
以前野蛮生长的代码,在3个月前的我看来,就是一个噩梦,由于我要将他们从 1-2G RAM 的安卓机器移植到只有 256M 的 Linux 设备上。后面的故事其实你们也知道,我经过 IoT.js 创造了 ShadowNode。但还不止于此,由于一开始我认为只要我把 V8 换成了轻量的 JerryScript,就能完美解决问题,大不了就是一些兼容性的问题。api
然而,我彻底忽略了 JS 代码的解释性能问题,对于几十M大小的代码,通常的解释器根本跑不起来,我稍微作了一些裁剪的代码,彻底运行起来大概还须要到半分钟以上,后来我又尝试把代码用 Webpack 打包成独立的文件,不过效果几乎没有改善,后来我开始慢慢裁剪模块,梳理代码逻辑,最终我放弃了这条路。并发
我心一横,反正代码逻辑我都熟悉了,就把以前的代码,当心翼翼地重写,当我遇到了须要用 DBus 的时候,我去掉了大部分的 JavaScript 代码,转而用 C 实现,一样地,我用 C 语言重写了 MQTT、WebSocket 这些模块,而且使用彻底兼容以前模块的接口。我发现每当我减小几百行甚至几千行的 JS 代码,我就离成功进一步,因而就看到了今天的 ShadowNode。函数
最终,咱们的代码仅仅保留足够少依赖的同时下,完成了重写,执行效率虽然还在继续优化,不过也算是与以前的体验保持相对一致。工具
我并不想说 NPM 有多么的很差,反而引起咱们思考的一个问题是,NPM 在给咱们带来 DRY 的同时,怎么保证在中低端引擎以及设备的执行效率,这也许是咱们社区应该前进的方向吧!性能
想想,ShadowNode 从第一行代码开始,到如今也有半年了。就我我的而言,我最最最开心的是来自于我和团队小伙伴的一段对话。
背景是聊天聊到了一个特性,而后小伙伴说他帮忙提一个 Pull Request
而后我说:辛苦了!
小伙伴说:没事,主要是兴趣,就不要紧。
我想做为一个程序员,最最最开心的也许并非我能作到多大的并发,我能拥有多少的钱这些,而应该是有一些人不出于任何利益,只是单纯地喜欢你作的东西,而且愿意持续投入。
按照惯例,我仍是来立一个 Flag,在接下来的 v0.9.0 中,ShadowNode 主要会继续完成:
最后仍是按照习惯,放一个 ShadowNode 的连接,欢迎 Star 及使用:Rokid/ShadowNode
另外下次的发布系列文章中,我将分享如何在真实的设备上使用 ShadowNode 作硬件编程。