调用appendChild时是否解析javascript?
谷歌页面速度告诉我,我应该 我在标题中加载了两个外部Java脚本,并在文档底部调用了一个初始化函数 如果我遵循谷歌的建议,我应该/可以创建如下功能:调用appendChild时是否解析javascript?,javascript,html,onload,deferred-loading,Javascript,Html,Onload,Deferred Loading,谷歌页面速度告诉我,我应该 我在标题中加载了两个外部Java脚本,并在文档底部调用了一个初始化函数 如果我遵循谷歌的建议,我应该/可以创建如下功能: function downloadJSAtOnload() { var element = document.createElement("script"); element.src = "myscript1.js"; document.body.appendChild(element); element = document.
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "myscript1.js";
document.body.appendChild(element);
element = document.createElement("script");
element.src = "myscript2.js";
document.body.appendChild(element);
myinitialization();
}
我能否100%确保在成功加载和解析脚本之前不会调用
myinitialization()
?否则,解决方案是什么?通常在文档末尾(在“”标记之前)包含脚本文件就足够了
。。。
myinitialization();
这意味着文档将在脚本开始下载之前加载,但也意味着您可以保证执行顺序。根据Felix的说法,答案是否定的。我不能相信附加的代码将在调用
myinitialization()之前执行代码>
解决方案是将代码封装在一个文件中,并使用async
如果我理解正确,您会问我们如何确保元素的创建和src
属性的附加导致在调用myinitialization()
之前加载该内容?是的,myinitialization()调用两个脚本中定义的函数。我不记得这些调用是否是同步的,但通常情况下,当某个调用依赖于另一个调用时,您会侦听加载
事件。您可以100%确保立即调用该函数。在当前脚本终止之前,不会下载和计算其他代码。@Felix,那么你是说我的问题的答案是否定的,并且解析是异步进行的?但是我相信加载时间会比我实现“真正的”延迟解析“长得多”,否?@JVerstry-测量一下-如果你发现了真正的不同,我会感到惊讶。我打赌你会通过组合和缩小myscript1.js
和myscript2.js
来提高页面速度,从而减少一个HTTP请求。问题是,我并不总是在所有页面上同时加载这两个请求。。。但我可以创建多个压缩版本,没错……一个文件仍然会赢——因为它会被浏览器缓存。这意味着您只需为整个访问(以及后续访问)支付一次下载费用。
...
<script src="myscript1.js"></script>
<script src="myscript2.js"></script>
<script>
myinitialization();
</script>
</body>
</html>