作者回复: 总结的很好,很有经验👍
作者回复: 很赞
作者回复: 可以拿放电影电影来解释,通常,电影的帧速是24,也就是说每秒切换24幅画面,其中的每幅画面就是一帧。
理解什么是帧后,我们在回过头看看我们的页面。由于目前大多数设备的屏幕刷新率为 60 次/秒。因此,如果页面中有一个动画、或一个渐变效果、或者用户正在滚动页面,那么浏览器渲染动画的频率至少要和刷新频率保持一致,也就是每秒需要更新60次,这样我们就能计算出来生成每帧的预算只有(1/60)毫秒,也就是16毫秒多一点(1 秒/ 60 = 16.66 毫秒)。如果超过16毫秒,帧率将下降,并且会出现画面抖动现象,此现象通常被称为卡顿,会对用户体验产生负面影响。
所以,如果想要保证画面的流畅,就需要尽量降低每帧的渲染时间,所以局部更新流水线显得非常重要了,能大大减少处理每帧所消耗的时间。
作者回复: 主要几个途径:
1:chromium源码
2:chromium源码里面的一些注释和文档
3:还有油管上blinkon上有一些深入讲解内核的视频
目前基本没有系统介绍浏览器知识的文档,而且网上很多文档还是比较早期的,很多内容都不太适合新版的浏览器了。
这里将浏览器知识和前端系统下结合起来是一件工作量非常大的事。
作者回复: canvas绘制流程很简单,就是调用api直接在画布上绘制,没有DOM,也没有太多套路!
所有的绘制都是自己程序控制的
作者回复: 说的好,如果感觉到复杂和无序,那一定是哪里错了
作者回复: 现代浏览器做了优化,把滚动操作交给了合成线程来处理,也就是说滚动的内容会被当成一个单独的图层,发生滚动的事件的时候,图层直接由合成线程来生成,也就是说这种情况下没有占用主线程,所以通常情况下不会产生重排和重回操作,只是简单合成就可以了,这样效率是最高的!
为什么说“通常”呢? 这是因为目前渲染流程还是很复杂的,在滚动页面时,有些情况下,如果合成线程搞不定的,那么还要交给主线程去处理,这时候就涉及到重拍了,不过技术是往前发展的,渲染流程会变得越来约简单高效!
作者回复: 合成线程属于渲染进程,你可以看文中示意图!
浏览器进程是主进程,负责提供一些基础服务和调度其它进程,你可以回顾下第一节和第四节内容。