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 作硬件編程。