在这种情况下,以什么顺序执行动态添加的脚本文件?
In what order would the dynamical added script files be executed in this case?
我在这里读到一篇文章:
https://varvy.com/pagespeed/defer-loading-javascript.html它说我应该用这样的东西来加载javascript:
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
我想知道,如果我有一个以上的defer.js
加载,它将以什么顺序执行?
<script type="text/javascript">
function downloadJSAtOnload() {
var element1 = document.createElement("script");
element.src = "defer1.js";
document.body.appendChild(element);
var element2 = document.createElement("script");
element.src = "defer2.js";
document.body.appendChild(element);
}
if (window.addEventListener)window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
defer1.js
一定会在defer2.js
之前执行吗?
谢谢
appendChild()
同步追加脚本节点,但异步加载脚本。所以执行顺序是未定义的(它取决于网络延迟)。
我想知道,如果我有一个以上的deferred .js加载,以什么顺序将被执行?
混乱。
号
defer1.js
一定会在defer2.js
之前执行吗?
像这样动态地添加脚本时,不能保证顺序。它们会在被检索时立即运行,因此如果defer2.js
被检索的速度比defer1.js
快,它将首先运行。
要按顺序执行它们,您必须按顺序请求它们,这意味着您不能请求defer2.js
,直到您在defer1.js
上收到load
事件。这意味着你下载JavaScript的速度会更慢,因为浏览器不能并行地发出请求,如果你把脚本标签放在文档的末尾,就在关闭</body>
标签之前,它可以做到。
你说过你担心在pagspeed Insights上得到不太完美的分数。别担心。不管你的链接文章说什么,PageSpeed Insights足够聪明,知道script
标签在关闭</body>
标签之前不会造成任何加载时间问题。例如,如果您为JavaScript提供适当的缓存头,则该页面的pagesspeed Insights将获得100/100:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Testing</title>
<meta name=viewport content="width=device-width, initial-scale=1">
<style>
body {
font-size: 16px;
}
</style>
</head>
<body>
<p>Testing 1 2 3.</p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="script1.js"></script>
<script src="script2.js"></script>
</body>
</html>
(其中script1.js
和script2.js
有一点jQuery代码在他们。)
当然,在可能的情况下,避免使用多个脚本(例如,如果可以的话,将上面的script1.js
和script2.js
合并;关于是否在合并后的文件中包含jQuery或使用CDN(如上所述),存在争议。
defer1.js这个脚本将先加载,然后加载defe2 .js这一次加载等等
- ScriptManager.RegisterStartupScript保持多次添加脚本块
- 如何在 JavaScript 中的 HTML head 标记中动态添加脚本值
- 添加脚本包括一个顶点:组件
- 如何在正文元素之前添加脚本
- 如何使用 javascript 添加脚本代码
- 如何使用javascript在子窗口中添加脚本文件
- 在 CakePHP 中,现在 View->addScript() 已被弃用,我如何向我的布局添加脚本*一次*
- 在页面加载 c# 上添加脚本
- 如何在 iframe for jQuery 中添加脚本元素
- 如何在 PHPBB3 Teamplate 中动态添加 <脚本> 标签
- 在页面 JavaScript 中动态添加脚本
- 如何从HTML字符串动态添加脚本到网页
- Javascript性能-使用$.getScript()添加脚本
- 动态添加脚本时未定义$/jQuery
- Google+Business帐户,添加脚本以自动将同事添加到新用户的同事圈中
- 添加<脚本>元素时,CSS 翻译过渡停止工作
- 不能在header中添加脚本
- 在window.onload后添加脚本src
- 添加脚本路径到xslt文件
- 如何在html文件中添加脚本标签,在jquery.js被包含之后,但在结束正文标签之前只使用javascript