相关问题
首页LazyForEach predict耗时久分析
350浏览 • 1回复 待解决
冷启动加载耗时长,应用在设备上冷启动打开加载完成耗时XXXXms
567浏览 • 1回复 待解决
NAPI 的 napi_throw_error 不会导致应用崩溃
418浏览 • 1回复 待解决
openharmony napi 异步耗时阻塞js的ui刷新
3952浏览 • 1回复 已解决
鸿蒙NAPI机制具体的执行过程,如何实现js和c++通信的
11302浏览 • 1回复 待解决
JsCreateAVPlayer耗时较长
452浏览 • 1回复 待解决
WebView之通信,什么是WebView,为什么要通信,如何实现通信?
528浏览 • 1回复 待解决
应用事件打点-统计某个页面浏览时长
344浏览 • 1回复 待解决
Access Token和Refresh Token的有效时长是多久
602浏览 • 1回复 待解决
socket通信示例,创建tcp server和tcp client进行通信
226浏览 • 1回复 待解决
性能调试工具及其滑动丢帧案例分享
211浏览 • 1回复 待解决
Xcomponent绘图流程分析
442浏览 • 1回复 待解决
List滚动条时长时短,求解决方案?
527浏览 • 1回复 待解决
指令数问题分析,如何抓取指令数进行问题拆解和分析。
213浏览 • 1回复 待解决
napi_get_arraybuffer_info 和 napi_create_arraybuffer 的使用
547浏览 • 1回复 待解决
如何分析Faultlog日志的内容(JSCrash,CppCrash、Appfreeze等异常的分析步骤)
667浏览 • 1回复 待解决
鸿蒙是否进行异步通信?
2576浏览 • 1回复 待解决
fegin 和 docker 通信问题
1556浏览 • 1回复 待解决
分析埋点无法正常上报
384浏览 • 1回复 待解决
什么是PolarDB的锁分析?
1547浏览 • 1回复 待解决
NAPI 通过 napi_wrap 创建的对象似乎没有被销毁
474浏览 • 1回复 待解决
什么是PolarDB的空间分析?
2708浏览 • 1回复 待解决
冷启阶段 H:JSPandaFileExecutor::ExecuteModuleBufferSecure 占用大量耗时
395浏览 • 1回复 待解决
动态设置文本导致致命错误
5810浏览 • 1回复 待解决
有没有性能分析工具啊?
282浏览 • 1回复 待解决
1:通过trace看,异步网络请求的完成后处理时间长,导致主线程卡顿。网络请求是从主线程起的异步任务,但是异步任务完成后的回调是在主线程进行的,所以此函数回调耗时会影响主线程卡顿。
2:Napi的线程工作原理如下:complete函数在起线程任务中执行。
3:napi创建异步任务的接口和创建异步任务的业务代码如下,complete函数对应业务代码为:finishFunc函数,但是finishFunc函数实现如下所示,也很简单,只是做了一个赋值。
4:本地尝试复现,增加日志发现虽然业务代码很简单,只是将native数据 赋值给js。但是耗时较长。
3:到此本以为是由于数据copy赋值导致的问题。但是继续观测trace文件中的ArkTsCallBack涌道,发现arkts有业务处理耗时占用比例也极高。因此怀疑该trace打点不止是该函数内。通过与性能工具专家胜军 军哥讨论并通过demo验证,fetch之后的then处理也包含在了这个trace函授打点之内,因此将耗时统计放到napi_resolve_deferred之前,得到的结果确认:该函数本身并不耗时:
4:并且通过IDE的ArkTsCallback调用栈看到,确实是异步线程拿到数据之后,对数据进行处理的业务消耗导致:
5:同理:在启动过程中也有 NAPI: complete FileReadText 的业务消耗:
6:该部分内容都是动态布局,需要动态布局进行分析,这些耗时消耗是否可以进行并发处理。
总结:
1:Napi的Compte 回调 在创建异步任务的线程处理,如果是主线程创建,complete回调也在主线程,如果回调耗时,也会影响主线程。
2:由于complete是返回一个promse,因此promise之后then的处理消耗也是在该函数内消耗。即:promise之后的所有回调/Then处理,都在一个线程内。因此需要注意promise/async并没有起线程,promise内部或者then的处理都在同一个线程内。如果有耗时操作,不建议使用promise/async,建议使用TaskPool进行异步调度。
3:trace是通过代码增加的打点,调用栈是通过系统采样采集的,两者侧重的不同,两者可以结合使用,方便问题定位。