HarmonyOS Web组件onInterceptRequest做资源拦截时建议用同步返回还是异步返回?

1、Web组件onInterceptRequest 方法做资源拦截时,建议用同步返回还是异步返回?这两者性能上面有没有区别?

2、如果要返回沙箱里面的文件,这里面涉及到文件IO操作,使用同步返回方式,会不会卡顿?

3、异步返回的代码示例有没有?

4、如果返回沙箱文件,使用同步调用,返回文件fd,这样会不会性能会好,但是fd的close在哪里做?Web组件会自动做close fd吗?

HarmonyOS
2024-09-05 12:53:21
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

1.读取文件后返回用异步比较好。

2.读取的文件过多,过大同步可能影响卡顿。

3.代码如下:

async getFile(url : string) { 
  const fileName = url.split("/").pop(); 
  const filePath = this.context.cacheDir + '/'+fileName; 
  const flag=this.hasFile(filePath); 
  if(!flag){ 
    await this.downloadImage(url, filePath); 
  } 
  let file = await fs.openSync(filePath, fs.OpenMode.READ_ONLY); 
  let arrayBuffer = new ArrayBuffer(4096); 
  return file.fd; 
} 
Web({ src: $rawfile('iframe.html'), controller: this.webviewController }) 
  .onInterceptRequest((event) => { 
    if (event) { 
      console.log('url123456:' + event.request.getRequestUrl()) 
    } 
 
    const url = event!.request.getRequestUrl(); 
 
    console.log(url.endsWith(".jpg") + '123456') 
    if (!url.endsWith(".jpg")) return null; 
    try { 
      let url2='https://1.jpg'; 
      this.getFile(url2).then(fd => { 
        this.responseweb.setResponseData(fd); 
        this.responseweb.setResponseCode(200); 
        this.responseweb.setReasonMessage('OK'); 
        this.responseweb.setResponseIsReady(true); 
      }); 
      this.responseweb.setResponseMimeType('image/*'); 
      this.responseweb.setResponseIsReady(false); 
      console.log(this.responseweb.getResponseData().toString+"123456") 
      return this.responseweb; 
 
    } catch (error) { 
      return null 
    } 
  })

4.Web组件会自动做close fd。

分享
微博
QQ
微信
回复
2024-09-05 15:27:14
相关问题
HarmonyOS 怎么拦截返回键盘
297浏览 • 1回复 待解决
webview拦截返回按钮。
783浏览 • 1回复 待解决
HarmonyOS 拦截系统返回手势问题
403浏览 • 1回复 待解决
HarmonyOS 侧滑返回事件拦截与绑定
1135浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
2133浏览 • 1回复 待解决
HarmonyOS 关系型数据库api异步返回
387浏览 • 1回复 待解决
HarmonyOS web组件怎么拦截请求
513浏览 • 1回复 待解决
有谁知道如何拦截住页面返回
616浏览 • 3回复 待解决
HarmonyOS Web对about:blank组件拦截
169浏览 • 1回复 待解决
webview的oninterceptrequest中调用异步操作
2024浏览 • 1回复 待解决