Open ymcdhr opened 5 years ago
https://www.jianshu.com/p/e141d1543143 https://cloudreports.net/will-css-loading-blocked-the-rendering/
parser:解析, Render Tree:渲染树 Layout:安排布局
(3.1)js的下载和解析执行
(3.2)css的下载和解析(不包括渲染)
(3.3)css的渲染
参考资料:https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded
示例1:script在style前面执行,js会阻塞css和页面的渲染
<html> <head> <script> console.log(1111); </script> <style> #load-box{ color: rebeccapurple; } </style> </head> <body> <div id="load-box"> 7、html页面加载时,会阻塞加载等情况 </div> </body> </html>
示例2: 1、script和style都是异步请求(在解析html时,同时发出异步请求) 2、js的加载(包括等待文件下载完成和执行)会阻塞css的解析和渲染 3、js的加载不会影响css文件的下载(只是没有解析和渲染)
<html> <head> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="./style.css"> </head> <body> <div id="load-box"> 7、html页面加载时,会阻塞加载等情况 </div> </body> </html>
参考资料:
https://www.jianshu.com/p/e141d1543143 https://cloudreports.net/will-css-loading-blocked-the-rendering/
一、注意/重要:
1、浏览器分为:下载、解析、渲染三个过程,例如:有可能html文件已拿到并解析,但是浏览器中生成的html还没有生成完整
(1)下载/加载——浏览器下载html、js、css等静态资源文件
(2)解析
(3)渲染
parser:解析, Render Tree:渲染树 Layout:安排布局
2、这三个过程在实际进行的时候又不是完全独立,而是会有交叉。会造成一边加载,一边解析,一边渲染的工作现象。
二、浏览器里面的dom tree的概念:
三、页面加载流程:
1、浏览器下载html文件
2、浏览器解析html文件(生成dom tree,在内存中看不见)
(1)在渲染DOM之前,浏览器解析html文件之后异步发起css、图片、js的下载请求,无论他们是否在HEAD里;
(2)异步请求的发出和渲染html文件是同时进行的;
3、 浏览器渲染html文件(根据dom tree生成render tree,从上到下的顺序,执行代码);
(1)执行到html中的style、link、或者script,会有几种情况(是执行代码,不是请求文件;文件可能已经下载完成);
(2)如果是style、script内联代码,顺序执行;其中js代码的执行,会阻塞后续html文档渲染;
(3)如果是link、scrpt异步src文件,需要等待文件下载完成后解析、执行渲染,否则阻塞(必须要有响应码,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕);具体以下两种情况:
(3.1)js的下载和解析执行
(3.2)css的下载和解析(不包括渲染)
(3.3)css的渲染
(4)如果script标签上加了async,则会将js代码执行加入异步队列;
四、domcontentloaded和load的区别
1、domcontentloaded是dom元素全部解析完成即触发;此时可能,
2、load是dom元素和css都解析并渲染完成;(即生成完整的render tree和display)
参考资料:https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded
示例1:script在style前面执行,js会阻塞css和页面的渲染
示例2: 1、script和style都是异步请求(在解析html时,同时发出异步请求) 2、js的加载(包括等待文件下载完成和执行)会阻塞css的解析和渲染 3、js的加载不会影响css文件的下载(只是没有解析和渲染)