图片中的getIncomeVO每一帧都会调用,initIncomeVOs用来初始化Dic,第一次初始化完成后,下次就直接返回了。通过chrome的debug调试发现,调用时间特别长,并且有明显卡顿,在一开始初始化,移除掉async后就正常了。
initIncomeVOs放到get函数里面的原因,是想懒惰调用,不想一开始就初始化配置表对象,因为有些模块可能整个生命周期都用不到
图片中的getIncomeVO每一帧都会调用,initIncomeVOs用来初始化Dic,第一次初始化完成后,下次就直接返回了。通过chrome的debug调试发现,调用时间特别长,并且有明显卡顿,在一开始初始化,移除掉async后就正常了。
initIncomeVOs放到get函数里面的原因,是想懒惰调用,不想一开始就初始化配置表对象,因为有些模块可能整个生命周期都用不到
new Promise((re,rej)=>{
this.doSomething(re)//re.resolve(data)
}).then((data)=>{
console.log(“promise不香吗”)
})
你好,可以问一下,手动创建new Promise和我这个async有区别吗?
Promise貌似不卡,我不懂
好像真的new Promise返回不会卡,懵逼了。
老哥,能贴下你改后的代码吗,想对比下
牛了,我那个不显示滚动条,居然也是因为调用了asnyc的方法。。。。。。
await频繁调用的地方,直接new Promise(async(resolve)=>{}) 再包裹一层。
这个await居然会卡,懵逼得很
老哥,我才疏学浅,这个文章和卡有什么关系?
我理解得就是一个执行顺序的问题,再程序中也不应该造成卡顿把?
你在for循环里使用await执行vo.init(),等于依次执行vo.init(),当然会卡
这部分如果没有依赖关系可以改成并行的
let promiseList = [];
for(let c in cfg){
let vo = new voType(cfg[c]);
map.set(vo[getKeyFun](),vo);
promiseList.push(vo.init());
}
await Promise.all(promiseList);
return map;
第一次调用后,这个函数不是不会再进入执行了吗?
不过大佬这个写法好,牛逼!!
感觉不是因为await卡,而是像后面那个大佬写的,你for循环里的await堵塞了后面的流程,导致本来原来并行,现在只能串行。而且查了下资料,貌似用async/await比你直接用promise效率高O.O
这个init函数按道理只会调用一次,之后就不会进入了
这个你得确认下init是不是只掉了1次,还是说其他哪个地方慢 
执行的慢我倒相信,卡顿就离谱。
卡顿一般是你在一帧里面消耗了太多了的性能,
而await反而是让并行的一些异步操作放慢,变成串行的操作,按道理减少了计算量不卡才对。
你应该不是卡顿吧,只是获取vo.init太慢了,让vo.init()变成串行的Promise.all的那个方法有效吗?
每帧调用确实会卡顿,Promise.all有效的。但是这个init方法执行一次后按道理就不会进入再次执行了,但是每次await init方法都会卡顿