來源 | HaaS技術社群不看這幾篇好文,就别說自己了解物聯網
随着三星在2015年将IoT.js & JerryScript引擎開源之後,IoT場景同時也迎來了更多JS開發者,目前JS語言涉及的開發領域有:
- Web網站:目前主流的Web網站由HTML5 + JS語言開發為主。
- NodeJS服務:基于NodeJS可以開發各種後端服務
- 移動開發:基于浏覽器引擎開發混合的移動端應用
- 插件開發:可以開發VSCode編輯器插件
下面主要講解一下IoT場景下JS語言的特性,讓更多的JS開發者将自身能力發揮到IoT場景上。
開發門檻
目前主流的程式設計語言門檻排序如下 彙編 > C > C++ > Java > JS,而且最近幾年随着浏覽器引擎的大力發展,JS語言超級門檻的特性,吸引了一大批從業人員,比如拿國内開源Vue.js前端架構舉例。
下圖為
Vue.js官網重點HighLight的三個特性,目前國内超過50%的前端開發者選擇該架構
- 入門門檻低:基于html模闆,對熟悉html開發者的而言非常容易了解和學習
- vue-cli腳手架:工程一鍵初始化/建構.簡化了前端開發人員開發流程
- 平滑內建:很容易在現有的工程中內建,且不會幹擾原有工程邏輯.
- vue對輕量級工程更加友好,快速,友善,一般3-5天就可以開發應用
- 社群營運:vue尤其在國内運作的比其他前端架構做的要好
目前HaaS開發者架構将Vue.js架構适配到了IoT帶屏裝置上,具體快速上手可以見
文檔。
應用熱更新
熱更新就是當你在開發環境修改代碼後,不用重新整理整個頁面即可看到修改後的效果。
不同于傳統嵌入式開發流程,JS應用在PC端開發完成後,無需編譯、連結、固件燒錄等繁瑣步驟,使用者可直接j将JS應用推送到裝置上,且不需要重新開機裝置就可以驗證,達到應用熱更新能力,該特性可以有效的降低IoT更新對OTA的依賴。
一般JS熱更新分為本地熱更新和線上熱更新,下面拿HaaS 輕應用熱更新舉例。
本地熱更新
通過有線方式(序列槽)對裝置的應用進行更新,可适用于裝置無法聯網或輕應用代碼運作異常的情況。
下載下傳模式
本地熱更新與實際硬體的接線強相關,以 HaaS600開發闆為例,需先切到下載下傳模式,參考
HaaS600線上熱更新
通過無線方式(網絡)對裝置進行熱更新。當裝置不在本地或者裝置無法跟電腦連接配接的時候,可以通過網絡通道将輕應用代碼下發到裝置,類似OTA功能。
JS引擎
谷歌的V8引擎給JS語言帶來了更多的現象空間,但是由于資源開銷問題,一般在IoT低配置的裝置上,不會選擇V8引擎,下面介紹一下目前IoT上低資源開銷的JS引擎。
JerryScript
- RAM:< 64 KB RAM
- ROM:< 240 KB
- ES文法:全面支援ES5.1文法
Duktape
- RAM:< 64 KB
- ROM:< 400KB
- ES文法:前面支援ES5.1文法,部分支援ES6文法
Quickjs
- RAM:< 200KB
- ROM:< 600KB
- ES文法:支援ES5.1、ES6、ES2019、ES2020文法
下面為幾種場景JS引擎的Benchmark對比
Engine | QuickJS | DukTape | V8 --jitless | V8 (JIT) | |
Executable size | 620K | 331K | 211K | 28M | |
Richards | 777 | 218 | 238 | 1036 | 29745 |
DeltaBlue | 761 | 266 | 209 | 1143 | 65173 |
Crypto | 1061 | 202 | 255 | 884 | 34215 |
RayTrace | 915 | 484 | 286 | 2989 | 69781 |
EarleyBoyer | 1417 | 620 | - | 4583 | 48254 |
RegExp | 251 | 156 | 2142 | 7637 | |
Splay | 1641 | 1389 | 4303 | 26150 | |
NavierStokes | 1856 | 1003 | 394 | 1377 | 36766 |
Total score (w/o RegExp) | 1138 | 468 | 1886 | 41576 | |
942 | 408 | 1916 | 33640 |
得分越高性能越好,從上面可以得出一個結論,IoT場景下如果裝置硬體資源應許,quickjs引擎是一個不錯的選擇。
總結
JS語言在IoT上發展才幾年,暫時還談不上最适合IoT裝置的開發語言,但是随着AI、IoT、雲計算、大資料等技術的快速發展,和在衆多産業中的垂直産業落地應用,AI與IoT在實際項目中的融合落地變得越來越多,使得多元化的智能裝置也蓬勃發展,同時使用者也需要更多個性化的更好的使用體驗、更好的操作感受;JS語言在提升開發者的開發效率同時,最終讓使用者獲得:“安全、簡單、便捷、舒适的體驗”。
更多精品好文
如何從零設計一種物聯網組網協定 帶你了解熱門IoT開源項目:home assistant 如何用幾行Python代碼在物聯網裝置上實作語音AI自動識别? 物聯網需要什麼樣的UI互動方式? 如何分析物聯網裝置問題,看懂這篇文章就夠了 透過ALSA這層迷霧剖析AliOS Things音頻架構設計 漫談農業物聯網與網際網路技術的結合 傳感器,物聯網時代的智能硬體數字化入口 如何快速搭建一個像“天貓精靈”的智能語音助手? 物聯網之IP Camera解決方案簡介 從語音互動曆史淺看它是否會是物聯網行業的一個爆點? 帶你走進多媒體世界:視訊檔案是怎麼播放出來的 物聯網雲端一體AI方案的探索 物聯網裝置連接配接的下一個引爆點:4G Cat.1 物聯網教育現狀和前景 一文看懂藍牙在物聯網中的應用場景 下一個智能硬體爆品是什麼? 華為、阿裡、小米都在用的全屋智能技術 為什麼物聯網領域使用Rust的項目越來越多? 物聯網中也能使用區塊鍊技術?面向IoT的區塊鍊基礎架構IoTeX 開源硬體的前世今生 物聯網碎片化的一些思考 邊緣計算在物聯網行業的應用 物聯網太難 ? 不妨試試用Python來開發 5G會給物聯網行業帶來哪些變化? 必須要了解的物聯網安全知識 ARMv9能給ARM帶來新一輪騰飛嗎?(安全篇) ARMv9能給ARM帶來新一輪騰飛嗎?(人工智能篇) 國産物聯網作業系統的出路在哪裡? RISC-V架構能否引領物聯網時代? 物聯網到底為什麼這麼火? 誰才是物聯網連接配接技術中的王者? 物聯網平台大量出現能否将行業帶入爆發式發展 腳本語言适合物聯網開發嗎 從“嵌入式”到“物聯網”的四大轉變 物聯網發展新趨勢</div>