-
js内联脚本的阻塞:
当页面中有内联脚本时,会直接执行,同时也会阻塞页面的展示与其他资源的加载。参考
-
link一般放在head中,这样可以让cssom和dom的构建同时进行。等都构建好之后开始形成渲染树,然后进行渲染。如果放在标签的前面,所有dom元素后面,dom绘制不会依赖css样式,浏览器会先渲染出一个没有样式的页面,然后花费额外时间来解析CSS,解析完后会形成新的渲染树,然后重新渲染,这样就会发生重排重绘
注:浏览器在解析html之前会预解析html,找出html中的link,script等依赖项,link在dom之前,也就是说dom绘制依赖css样式。 为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。(这段话是《how browsers work》里面讲的,让我茅塞顿开)
关键渲染路径(从触发到绘制):
- JavaScript(可以通过js实现一些视觉上的变化,这一步是用来触发视觉变化的)
- style(浏览器对样式重新进行计算,在这个过程中,浏览器会根据选择器进行重新匹配,去计算哪些元素的css受到了影响,新的规则是什么样子的,有了这个规则就知道这个元素最终应该是什么样子的了)
- layout(清楚元素的大小与位置,就知道应该如何绘制这个元素了)
- paint
- composite
参考: