第一种方式:
<script type="text/javascript" src="jquery.js"></script>
第二种方式:
var js = document.createElement("script");
js.type = "text/javascript";
js.src = "jquery.js";
js.async = false;//THIS ATTRIBUTE
var h = document.getElementsByTagName("head")[0];
h.parentNode.appendChild(js);
问题:上述两种方式有什么区别。 Google Page Speed Insight 工具不会将First Way
作为Render blocking issue
投诉。
仅供参考:我们必须加载jQuery
文件而不加async
,因为GTM
依赖于它。
答案 0 :(得分:2)
关于如何加载脚本,WHAT-WG HTML spec进入非常详细。
根本区别 - 尽量不要笑 - 是一部分是HTML的一部分而另一部分是由JavaScript代码生成的。
使用HTML中的script
标记:
document.write
而不会删除文档使用script
添加带有JavaScript代码的async = false
元素:
document.write
虽然没有<script src="..."></script>
或async
属性的defer
(例如阻止脚本标记)阻止了网页加载,但影响可能不那么严重。
那就是说,如果PageSpeed没有抱怨head
中的阻止脚本标记,我会非常非常。如果没有非常有充分理由做其他事情,阻止script
代码应该在body
的末尾,就在结束</body>
代码之前。
从评论中看来,您似乎在使用Google脚本,而且您已经说过他们想要script
中的head
代码。它们可能意味着您使用defer
(以保持脚本之间的顺序):
<script src="jquery.js" defer></script>
<script src="gtm.js" defer></script>
...在head
中。 defer
表示脚本不支持DOM(它们并行下载但在DOM解析完成之前不运行),但执行执行按顺序。
答案 1 :(得分:-1)
对于第一种方法:有几种方法可以执行外部脚本。
第二种方法