芯片开放社区
直播中

laisvl

8年用户 1087经验值
私信 关注
[技术讨论]

【RISC-V 生态软件系列】HaaS UI进阶教学八:使用QuickJS原生方式扩展JSAPI(四) QuickJS扩展与HaaS UI系统框架扩展区别

名词解释

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

更多回帖

发帖
×
20
完善资料,
赚取积分