Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用appendChild时是否解析javascript?_Javascript_Html_Onload_Deferred Loading - Fatal编程技术网

调用appendChild时是否解析javascript?

调用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.

谷歌页面速度告诉我,我应该

我在标题中加载了两个外部Java脚本,并在文档底部调用了一个初始化函数

如果我遵循谷歌的建议,我应该/可以创建如下功能:

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>