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 以及模塊化的一些見解重塑,敬請期待!性能

相關文章
相關標籤/搜索