浏览器渲染HTML页面的过程
2017-03-19 21:46
513 查看
友情链接:http://www.tuicool.com/articles/vmu2Uvn
遇到script文件和CSS文件都会另起线程去下载;内嵌的script标签和style标签,会直接执行,分别阻塞DOM树和CSS规则树
无论内嵌的script脚本、外链的script脚本下载完都会阻塞构建DOM树; CSS文件执行和内嵌的style标签阻塞CSSOM
直到DOM树和CSSOM规则生成完毕后,浏览器结合两者生成渲染树RenderTree,浏览器将渲染树绘制到页面上,也就是首次显示页面
最后,body底部的JS脚本下载完成后通过DOM API修改DOM, 通过CSSOM API修改样式,每次修改都会造成渲染树RenderTree的重新布局和重绘, 也就是Reflow。(而修改颜色的话,只会Repaint 不会Reflow
当遇到script文件加载/执行会阻塞后面dom树的构建(因为javascript可能会改变dom树);而遇到css文件则会阻塞渲染树的构建,即dom树依然继续构建(除非遇到script标签并且css文件依旧未加载完成),但不会渲染绘制到页面上。而无论哪个阻塞,该加载的文件还是会加载,例如html文档中的其他css/js/图片文件。
js脚本放在head和body 有什么区别,分别是在什么情况下 总结:
head中的脚本会在页面加载之前解析,可以保证脚本在任何调用之前被加载
body中会在页面加载完成之后读取,放在body部分的脚本通常被用来生成页面的内容。
因为加载js脚本会阻塞页面的加载,为了用户体验也为了脚本可以操作dom,一般放在body中,
浏览器解析html是从上到下的。
如果把js放在head里的话,则先被解析,但这时候body还没有解析,所以会返回空值。一般都会绑定一个监听,当全部的html文档解析完之后,再执行代码:
windows.onload=function(){ }
style标签和css文件,都会阻塞CSSOM的构建;
defer,立即下载,延迟解析,可以延迟到文档完全被解析和显示之后再执行
浏览器渲染过程
浏览器接收到html代码,即自上而下解析:构建DOM树+构建CSSOM =>渲染树(解析——构建对象模型Object Model)遇到script文件和CSS文件都会另起线程去下载;内嵌的script标签和style标签,会直接执行,分别阻塞DOM树和CSS规则树
无论内嵌的script脚本、外链的script脚本下载完都会阻塞构建DOM树; CSS文件执行和内嵌的style标签阻塞CSSOM
直到DOM树和CSSOM规则生成完毕后,浏览器结合两者生成渲染树RenderTree,浏览器将渲染树绘制到页面上,也就是首次显示页面
最后,body底部的JS脚本下载完成后通过DOM API修改DOM, 通过CSSOM API修改样式,每次修改都会造成渲染树RenderTree的重新布局和重绘, 也就是Reflow。(而修改颜色的话,只会Repaint 不会Reflow
注意:
把js放在body之后,是为了预防外部js文件过多时,浏览器呈现页面出现延迟,延迟期间浏览器的窗口一片空白。当遇到script文件加载/执行会阻塞后面dom树的构建(因为javascript可能会改变dom树);而遇到css文件则会阻塞渲染树的构建,即dom树依然继续构建(除非遇到script标签并且css文件依旧未加载完成),但不会渲染绘制到页面上。而无论哪个阻塞,该加载的文件还是会加载,例如html文档中的其他css/js/图片文件。
js脚本放在head和body 有什么区别,分别是在什么情况下 总结:
head中的脚本会在页面加载之前解析,可以保证脚本在任何调用之前被加载
body中会在页面加载完成之后读取,放在body部分的脚本通常被用来生成页面的内容。
因为加载js脚本会阻塞页面的加载,为了用户体验也为了脚本可以操作dom,一般放在body中,
浏览器解析html是从上到下的。
如果把js放在head里的话,则先被解析,但这时候body还没有解析,所以会返回空值。一般都会绑定一个监听,当全部的html文档解析完之后,再执行代码:
windows.onload=function(){ }
总结
内嵌和外链的js脚本,都会阻塞DOM树的构建;style标签和css文件,都会阻塞CSSOM的构建;
script脚本的async和defer属性
async,立即下载,异步操作,即和加载和渲染后续文档元素的过程并行进行,也就是异步,一起操作defer,立即下载,延迟解析,可以延迟到文档完全被解析和显示之后再执行
相关文章推荐
- 浏览器渲染HTML过程(页面重构师的存在所在原因)
- HTML页面渲染过程——在浏览器中敲入URL到完整渲染出来,经历的过程解析
- 了解html页面的渲染过程(续)
- 关于浏览器渲染html页面采用的三种文本模式
- 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)
- 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
- 了解html页面的渲染过程以备学习前端的性能优化(续)
- 浏览器加载、渲染html的顺序和页面优化
- 160826、浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
- 浏览器渲染页面过程
- 从一个url输入浏览器到页面渲染出来,这个过程都发生了哪些事情?
- 了解html页面的渲染过程(续)
- 浏览器渲染页面的过程,以及重绘和重排
- 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
- 了解html页面的渲染过程
- 了解html页面的渲染过程
- 浏览器渲染页面的过程
- 浏览器的渲染页面过程和重排、重绘
- 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
- 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘