鉴于我的HTML页面请求3个脚本文件:
<script src="a.js"></script>
<script src="b.js"></script>
<script src="c.js"></script>
<link rel="stylesheet" type="text/css" href="d.css"/>
到目前为止,我的理解是浏览器请求a.js
和文档在下载并执行a.js
之前不再进行解析(脚本标记上没有async属性的默认行为)。
但是现在看一下Chrome开发者工具,选中了加载框的时间线标签,我看到并得到了以下几点:
Send Request (this is request for HTML page itself)
Receive data
Receive data
Receive data (this are pockets coming if I understand correctly)
Finish Loading (here page is loaded now)
Parse HTML (now browser starts reading actual HTML code)
Send Request (a.js)
现在,在这里,我希望浏览器暂停所有内容并等待a.js
完全下载,然后执行,然后再开始解析HTML并阅读b.js
,其余的)
不过我输出了这个输出:
Send Request b.js (Why is this happening, a.js is not finished loading yet)
Send Request c.js (again why?)
Send Request d.css
只有这样我才能得到:
Finish Loading a.js
浏览器执行a.js
,然后只有html中的SCRIPT
标记按顺序执行其他文件(如果已经下载)。
现在我的问题是,如果b.js
未完全下载并执行,浏览器如何知道请求c.js
,css
和a.js
文件? Chrome是否应用了一些优化和加速过程?如果a.js
运行时修改并删除其余的SCRIPT
代码,该怎么办?请求被浪费了吗?或者我只是阅读输出错误?
答案 0 :(得分:1)
答:因为每个JS文件都是在HTML中指定的。浏览器尝试批量下载尽可能多的下载以节省时间。从右键单击某个内容并选择&#34;保存链接为&#34;即使你还没有指定文件名,它也会被下载。如果您然后点击取消而不是指定名称/位置,则浪费了已下载的任何内容。
Chrome会针对页面中的资源应用类似的策略。如果a.js删除任何/所有后续脚本标签,那么是 - 他们的下载是徒劳的。
另一种选择是性能不稳定。
答案 1 :(得分:1)
如果要下载多个内容,浏览器通常会并行下载其中的几个。并行下载的确切数量因浏览器而异。
注意:CSS应该在JS之前,以便从并行下载中获得最大收益。