ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Chrome浏览器加载script机制浅谈

2022-01-22 11:32:30  阅读:245  来源: 互联网

标签:php 浏览器 浅谈 script Chrome c1 执行 document


最近在工作中遇到了一些script方面的加载顺序问题,下面进行一些介绍

在之前的理解中,浏览器是作为一个解释器,逐行分析代码,构建DOM树,然后进行资源加载的,那么如果在一个script执行过程中document.write一个新的script标记到文档流中,本script执行完毕后,浏览器就会同步执行新的script中的脚本资源。

那如果是通过document.createElement("script")的方式,然后动态加载到document head里面去的呢,这个被称为异步脚本加载机制,会异步地发出一个新的请求,然后在收到返回结果时候进入浏览器执行队列,开始执行,所以说这个的执行机制是不确定的,可能在下面的同步脚本任意一个之前,或者之后。举例:

后端的c1.php c3.php c5.php分别代表延时 1秒 3秒 5秒返回结果,再返回时候会分别打印 1111111   333333333  55555555

<script>
	var t = document.createElement("script");
	t.src="c1.php";
	document.head.appendChild(t);
</script>
<script src="c3.php"></script>

  这个显示的结果是

11111111

3333333

这个是在c1是一个异步的请求,而c3是一个同步的请求,同步的请求和异步的资源加载请求都发出后,1秒后c1.php返回结果,进入浏览器事件队列开始执行,3秒后c3.php返回,进入浏览器事件队列开始执行

那么是不是说一定是这个执行顺序呢,看看下面的情况

<script src="c5.php"></script>
<script>
	var t = document.createElement("script");
	t.src="c1.php";
	document.head.appendChild(t);
</script>
<script src="c3.php"></script>

  这个结果是

5555555

3333333

11111111

为什么是这样的结果呢,其实是因为Chrome有一种预加载机制,就是浏览器会先便利整个html文本,找到其中的资源链接标记,发送http请求,所以一上来发现了c5.php和c3.php的标记,注意此时还没有c1.php的标记。所以3秒后c3.php返回结果,等待执行,因为前面的c5.php还没有执行以及后面的内嵌脚本也没有执行,所以没有轮到执行,5秒后c5.php返回结果进入浏览器事件队列开始执行,打印555555然后执行异步加载c1.php,发送异步请求,然后c3.php的结果进入浏览器事件队列开始执行,打印333333然后第6秒c1.php返回结果打印111111所以,实际上是浏览器执行是按照同步顺序执行,但是请求资源却有优化,是在页面解析第一开始就请求资源的。

 

标签:php,浏览器,浅谈,script,Chrome,c1,执行,document
来源: https://www.cnblogs.com/swq-tj/p/15832647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有