• 木瓜777
    2019-11-29
    window.requestAnimationFrame 应该是在每一帧的开始就执行吧?

    作者回复: 应该说raf的回调任务会在每一帧的开始执行

    
     5
  • 猫叔
    2019-12-04
    老师,通过window.postMessage 发送的消息执行回调也是在空闲时间内执行的吗。因为我看到react框架为了模拟兼容requestIdleCallback。使用了postMessage
     2
     1
  • Geek_0d3179
    2019-12-03
    老师您好~ 在网上搜了一大圈之后还是存在疑惑,非常希望您的解惑~十分感谢!
    1、我了解到event loop的流程是:一个macrotask >> UI 渲染 >> 任务队列取下一个macrotask
    疑问:每执行一个macrotask后面一定会UI 渲染吗?如果此时DOM和样式并没有改变,根本不需要重新渲染呢?也就是根本不需要回流、重绘和合成。
    2、听了老师的讲解后,得知渲染进程在每一帧时间里都会重新绘制,合成一帧图片推到后缓冲区,就算UI没有变化也会执行吗?那这个执行的时机是?是得到VSync信号的时候吗?那这是作为一个宏任务执行的吗?
    3、我并没有搞清楚上面1和2的关系。也就是event loop 和 一帧时间的关系。我的理解:在一帧的时间里会不断的从任务队列中取出任务执行,那如果任务队列有太多任务,“重新绘制一帧推到后缓冲区”这个操作会被延迟吗?
    展开
    
     1
  • gigot
    2019-11-29
    老师,我想问下在 primose.then 中执行宏任务(setTimeout或 ajax),其中该宏任务应该加入哪个事件队列。
    是说微任务队列都是按顺序执行,其中每个微任务又有新的事件循环(包括宏任务和微任务),类似于新得全局环境,这样理解对吗

    作者回复: 不管在哪里请求setTimeout,它的回调函数都是在宏任务中执行的。

    不过在微任务中产生了新的微任务,新的微任务还是在当前的微任务队列中,所以如果在微任务中不停产生新的微任务,是会阻塞页面的!

     2
     1
  • -_-_aaa
    2019-12-20
    “当 GPU 接收到 VSync 信号后,会将 VSync 信号同步给浏览器进程,浏览器进程再将其同步到对应的渲染进程,渲染进程接收到 VSync 信号之后,就可以准备绘制新的一帧了”,感觉GPU就收到转发了个信号,其它什么都没干,渲染进程收到信号后开始绘“制新的一帧了“。GPU不是渲染图像的吗,为什么GPU不开始“绘制新的一帧“呢。
    
    
  • -_-_aaa
    2019-12-20
    “绑定 VSync 时钟同步周期和浏览器生成页面周期”这幅图中VSync之间的距离我猜测是8.33毫秒,这个信号应该是类似正余弦曲线波有正负,“VSync 同步周期是 16.66(1/60)毫秒”那么最小正周期是16.66,挡在最大值时发送一个1信号给GPU,GPU将信号同步给浏览器进程。
    
    
  • -_-_aaa
    2019-12-20
    ".....提交完成之后,GPU 会将后缓冲区和前缓冲区互换位置,也就是前缓冲区变成了后缓冲区",前缓冲区为什么要变成后缓存区,个人感觉应该是后缓存区变成前缓冲区,然后前缓冲区被回收。前缓存区的图像应该过时了
     1
    
  • Geek_0d3179
    2019-12-03
    如果raf的回调任务会在每一帧的开始执行,如果它执行时间很长(超过一帧),那就会阻碍后面所有任务的执行么?比如说用户的交互事件等高优先级任务也会受到影响导致卡顿么?
    我在网上看到的资料:为啥是先执行用户的交互任务,在执行raf的回调???

    作者回复: 会啊,一个任务在执行的时候是不会被中断的,即使有再高优先级的任务,都需要等到当前dr任务执行结束,所以如果raf回调函数中的代码过于耗时的话,那么会影响渲染帧率!

    等当前任务执行结束循环系统才会挑下个选优先级高的任务执行,因为用户输入的有限级高于raf的回调,所以会优先执行用户输入!


    
    
  • 王博
    2019-11-26
    觉得老师的绘图工具挺好的,老师可以推荐一下吗?谢谢

    作者回复: keynote啊

     2
    
我们在线,来聊聊吧