为什么Chrome似乎异步请求Javascript文件
Why Chrome seems requesting Javascript files asynchronously?
鉴于我的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
(脚本标签上没有异步属性的默认行为)。
但是现在查看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
标签的顺序执行其他文件(如果已下载)。
现在我的问题是,如果a.js
没有完全下载和执行,浏览器如何知道请求b.js
、c.js
和css
文件?Chrome 是否应用了一些魔法来优化和加快流程?如果运行时a.js
修改并删除SCRIPT
标记的其余部分怎么办?那么请求是否被浪费了?还是我只是读错了输出?
答:因为每个JS文件都是在HTML中指定的。浏览器会尝试批量下载尽可能多的下载以节省时间。从您右键单击某些内容并选择"将链接另存为"的那一刻起,它正在下载 - 即使您尚未指定文件名。如果您点击取消而不是指定名称/位置,那么您已经浪费了已经下载的任何内容。
Chrome 对网页中的资源应用了类似的政策。如果 a.js 删除任何/所有后续脚本标签,那么是的 - 它们的下载是徒劳的。
另一种方法是具有断断续续的性能。
如果要下载多个内容,浏览器通常会并行下载其中的几个。并行下载的确切数量可能因浏览器而异。
注意:CSS 应该在 JS 之前,以便从并行下载中获得最大收益。
相关文章:
- Facebook邀请好友请求javascript
- '$'未定义Jquery ajax请求-javascript导入
- 为什么Chrome似乎异步请求Javascript文件
- 基本的 AJAX 请求 Javascript/PHP 不起作用
- 请求Javascript/Angular遇到异步问题
- 为什么在浏览器请求javascript文件时请求Accept:*/*
- 是否可以在ajax请求(JavaScript)中使用File类(Java)
- 代码隐藏中的Cant请求javascript变量总是返回“”&”;
- ASP.NET潜在危险请求Javascript Regex
- 替代请求.javascript/jquery中的RawUrl
- 排队的函数调用请求javascript
- jQuery's请求Javascript函数
- 从CDN和本地请求javascript时不同的头
- 如何尽可能隐藏AJAX请求(JavaScript代码)
- 递归HTTP请求javascript
- 上传pdf/doc等和发送数据到服务器的请求- Javascript
- 当从本地服务器请求javascript时,Rails得到CORS错误
- 是ASP的使用.网络请求.JavaScript中的QueryString是安全的
- 按特定顺序加载(请求)javascript
- 使用facebook批量请求javascript api