来源 | 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 |
JerryScript |
V8 --jitless |
V8 (JIT) |
Executable size |
620K |
331K |
211K |
28M |
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 |
Total score |
942 |
408 |
- |
1916 |
33640 |
得分越高性能越好,从上面可以得出一个结论,IoT场景下如果设备硬件资源应许,quickjs引擎是一个不错的选择。
总结
JS语言在IoT上发展才几年,暂时还谈不上最适合IoT设备的开发语言,但是随着AI、IoT、云计算、大数据等技术的快速发展,和在众多产业中的垂直产业落地应用,AI与IoT在实际项目中的融合落地变得越来越多,使得多元化的智能设备也蓬勃发展,同时用户也需要更多个性化的更好的使用体验、更好的操作感受;JS语言在提升开发者的开发效率同时,最终让用户获得:“安全、简单、便捷、舒适的体验”。
更多精品好文
如何用几行Python代码在物联网设备上实现语音AI自动识别?
透过ALSA这层迷雾剖析AliOS Things音频框架设计
</div>