名词解释
AliOS Things: 阿里云智能IoT团队自研的物联网操作系统
HaaS:全称是Hardware as a Service,阿里云智能IoT团队基于AliOS Things系统推出的硬件即服务
HaaS UI:全称是Hardware as a Service User Interface,是源自AliOS Things操作系统上的一套应用&图形解决方案,支持C/C++和 JS两种开发语言
目前在HaaS轻应用平台有两种方式进行JSAPI的扩展:通过系统框架扩展和用QuickJS原生方式扩展,这两种方式都达到我们目的,但在使用方式和实现上都有所不同,下面我们具体说下区别:
1. 调用方式不同
系统框架上扩展:
{
$falcon.jsapi.Download.download({url:"http://aiot.aliyun.com/mini_app/list.json"},
(result) => {
console.log(">>>result: ", result)
});
console.log("run here");
}
通过QuickJS原生方式扩展:
import * as
timer from 'timer'
{
timer.setInternal(2);
timer.setListener((count, internal) => {
console.log("listener", count, internal);
});
timer.start();
console.log("run here");
}
系统框架方式扩展的JSAPI都是在$falcon.jsapi下的子模块,所以调用的时候的前面需要加$falcon.jsapi;
QuickJS原生方式扩展是在引擎下直接增加一个模块;
2. 参数传递和返回结果格式不同
系统方式扩展JSAPI的参数传递和返回结果都是JSon格式,类似:{url:"http://aiot.aliyun.com/mini_app/list.json"};
QuickJS扩展的JSAPI是根据每个方法的情况自定义,没有统一规定,相对灵活些;
3. 执行顺序不同
系统方式扩展JSAPI调用的地方只是添加了任务,在下次消息循环中执行, Downloader的例子结果如下:
会先打印"run here",之后才会运行真正download的Native代码;
而QuickJS方式添加的JSAPI是同步执行,timer的例子执行结果如下:
会先打印Native的setInternal, setListener,最后执行到"run here"
4. Native代码实现难易不同
系统方式扩展JSAPI的Native实现不用关心内存泄漏,线程模型等问题;
但是用QuickJS方式添加的模块需要关心线程模型和JSValue对象的管理,细节如上篇文章所讲;在之前项目中,查出的内存泄漏点很多是因为没有释放JSValue导致,所以系统框架将JSAPI进行封装,也是为了用户避免出现这些问题;
小结
系统框架扩展JSAPI和用QuickJS原生方式扩展JSAPI适用不同的场景,如果是新开发的JSAPI,推荐使用系统框架方式扩展,如果是之前已经开发QuickJS模块或者对QuickJS扩展方式已经很熟悉,那么使用QuickJS原生方式扩展也没有什么问题;
文章转载自:平头哥芯片开放社区 作者:sucool