浏览器渲染页面时css和js的加载过程

在浏览器渲染页面时:

遇到link开辟一个新的http请求线程去加载资源,但是GUI渲染线程会继续进行,所有CSS资源做顺序标识  并不是谁先请求回来  就渲染谁  而是等到都请求回来后  按照顺序标识在逐一渲染

如果遇到的是JS不管是内嵌的代码还是需要外链请求的代码,都是需要立即加载执行的(主线程去加载执行) =>它会阻碍GUI线程的继续渲染
[同步的处理],所以真实项目中,我们一般都会把JS放到末尾,就是等待DOM结构都加载完成后,我们再去执行的

不放在末尾,还想在DOM结构加载完成后执行

1. 把SCRIPT改成异步的即可

async VS defer

           async 从服务器获取资源是异步的(此时GUI继续渲染),但是一旦资源请求回来,会立即把请求回来的JS执行(此时会阻断GUI的继续渲染) => 多个asyncJS请求,谁先回来就先执行谁,没有顺序

           defer 从服务器获取资源是异步的,只不过请求回来资源后没有立即执行,需要等到GUI绘制完成,再去按照顺序把所有请求回来的JS逐一执行

<script src="js/1.js" async></script> 
<script src="js/1.js" defer></script>

绿线代表GUI渲染线程,蓝线代表异步加载线程,红线代表异步阻断GUI渲染线程的渲染线程

 

2. 或者监听事件,在DOM结构加载完成在执行这个代码 

               =>DOMContentLoaded DOM结构加载完

               =>load 所有资源都加载完 (晚于DOMContentLoaded触发的)

window.addEventListener('DOMContentLoaded', function () {
			//执行内容
		});
window.onload = function () {
			//执行内容
		};
setTimeout(function () {
			// 定时器是异步的,它能够触发执行的条件:不仅是到达时间了,而且是主线程已经加载完成了(所以可以用它代替window.onload)

		}, 1000);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值