ShadowNode v0.7.0 发布

Hi,你们好!我在这里很高兴地宣布,在过去20天里,ShadowNode 伴随着XX须要,已经悄悄地增长了不少新功能,而且已经在这不到一个月的时间,迭代了N个小版本了(目前版本管理还不是特别规范了),主要包含以下:node

  1. 增长了 TLS 模块,实现了客户端功能;
  2. 重写了原有地 HTTPS 客户端功能,使用 TLS 替换掉了以前地 libcurl 和 openssl,架构更加清晰明了;
  3. 增长了 MQTT 模块,而且支持 MQTT/MQTTS 协议,与 MQTT.js 接口保持对齐;
  4. 增长了像 Node.js N-API 同样地原生模块加载方式;
  5. 开放了部分 ES2015 特性如:箭头函数、字符串模版等;
  6. 修复了若干与 Node.js 的兼容性问题;

我也在今天抽空增长了在 TravisCI 的自动构建,在 ShadowNode 下个版本(v0.8.0)将会着手优化内存和性能方面的问题,以及 100% 兼容 N-API 的写法。内置模块以及社区兼容性将暂时不会再增长更多特性。git

彩蛋!破壳记

另外,今天将放出一个彩蛋,ShadowNode 的破壳记分享给你们。github

之因此会产出 ShadowNode 的缘由彻底是由于以前大量基于 Node.js 在设备端开发的应用程序,在移植到一些更低端的平台时,遇到的最大问题就是内存,想过不少办法包括:网络

  1. 参考 node-charkracore,把 Node.js 移植到其余轻量级的 JavaScript 引擎,如 JerryScript、Duketype;
  2. 使用 TypeScript 重写咱们的业务逻辑,而后生成 LLVM 后,再编译成纯机器代码;

上述的两个方案,在我看来都是可行性不错的,不过前者对 V8 以及相关 API 的工做量依然很大,后者我我的却是至关感兴趣去实现,不过这样会失去脚本语言的优点,再加上增长了交叉编译的门槛,得不偿失。架构

最终机缘巧合之下,我找到了三星开源的 IoT.js,当时发现这个项目时,看到文档的时候就已经开心得想跳起来了。IoT.js 已经作了至关一部分重要的工做了,包括增长 CommonJS 模块系统、文件系统模块、网络模块、UDP 模块、Buffer 还有最重要的 Stream 类族,并且整个构建系统也至关简单易懂,基于这些工做,我才能够轻松得往完成目前 ShadowNode 的工做。curl

然而在慢慢迁移的过程当中,有一些观点与 IoT.js 的开发团队是不一样的:模块化

  • IoT.js 原来并不支持从 node_modules 下加载模块,理由是但愿区分两个社区的模块,而 ShadowNode 的原则则是兼容更多的 NPM 模块;
  • IoT.js 因为须要支持其更低端的设备,RAM 通常在几百 KB 左右,不过也损失了不少开发体验,好比不支持调试,const/let 关键字,以及对内存的严格控制,然而 ShadowNode 环境相对宽松一些,所以开发体验将优于 IoT.js;

好,以上其实就是 ShadowNode 的一则短小的开发故事,若是你从中以为有趣,不妨也加入到 ShadowNode 开发社区中来,点击 Rokid/ShadowNode,欢迎 Star 🌟函数

下次将分享在开发 ShadowNode 过程当中,对于 NPM 以及模块化的一些见解重塑,敬请期待!性能

相关文章
相关标签/搜索