Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.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
Javascript 谷歌是否在使用;“推迟”;走错了路?_Javascript_Html_Browser_Rendering_Deferred Rendering - Fatal编程技术网

Javascript 谷歌是否在使用;“推迟”;走错了路?

Javascript 谷歌是否在使用;“推迟”;走错了路?,javascript,html,browser,rendering,deferred-rendering,Javascript,Html,Browser,Rendering,Deferred Rendering,见: 谷歌在这里使用: <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script> </body> </html> 我的问题是,谷歌为什么使用“延迟”,因为我认为它没有按照上面的脚本做任何事情 让我们比较一下(1): 鉴于此(2): 唯一的区别是,在案例:(1)中执行“

见:

谷歌在这里使用:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
</body>
</html>

我的问题是,谷歌为什么使用“延迟”,因为我认为它没有按照上面的脚本做任何事情

让我们比较一下(1):


鉴于此(2):


唯一的区别是,在案例:(1)中执行“script.js”时,您将确保“body标记的结尾”和“html标记的结尾”还不在DOM中。在案例(1)中,当执行“script.js”时,这些标记已经在DOM中。 但是body/html标记的末尾不会改变屏幕上的任何内容(渲染),因此这些标记实际上对“渲染”没有影响。因此,理论上这两个例子之间有一个小的区别,但在实践中根本没有区别

那么,使用延迟的原因是什么呢?让我们回到历史。如果要在旧浏览器中使用:

<script src="script.js"></script>
</body>
</html>

问题是您没有“预加载扫描仪”。他们可以扫描文档(并行),搜索已经开始的下载。当“HTML解析器”到达文档的该部分时,旧浏览器将第一次看到“script.js”。现在开始下载已经很晚了,这是浪费时间。这就是为什么他们提出了“defer”,这样您就可以将脚本标记放在文档的开头,但是执行将在html解析器处理整个文档时发生(因此不会阻塞html解析器)

对于较新的浏览器,“延迟”无论如何都没有意义,因为您可以在页面结束之前使用“同步脚本标记”。“预加载扫描程序”几乎会立即开始下载。由于您将其放在文档的末尾,脚本的执行不会阻止html解析器(execept end body/html,但这些标记无论如何都不会影响呈现)

因此,“延迟”只是在旧浏览器中添加了一些功能,因为在新浏览器中,您可以只使用文档末尾的“同步脚本标记”

但是,在旧浏览器中,只有将脚本标记放在文档的开头而不是文档的结尾,延迟才有意义。如果在文档末尾放置“延迟”,那么无论如何,浏览器必须等待很长时间才能开始下载

所以我要说的是:“延迟”在实践中没有什么区别,当您在文档末尾之前将其放在脚本标记上时。只有将其放在文档开头的脚本标记上,才有意义

所以在我看来,谷歌并不真正理解“延迟”的含义,因为他们为什么要添加它?它什么也没做。还是那是对我的错误想法

以下是我的一些问题/帖子,我对谷歌关于渲染和使用延迟/异步等的说法表示怀疑:

这就是为什么我想检查谷歌是如何制作自己的脚本的,在一次谷歌搜索之后,我已经找到了这个例子,对我来说,“延迟”的用法看起来很奇怪

无论如何,使用它可能是有原因的,但谷歌不清楚给出正确的理由。在文档中,谷歌正在讲述故事,我在这篇文章/问题中告诉你。但这不是像那样使用“延迟”的理由

我知道不同的浏览器对待“延迟”的方式不同,所以也许这就是谷歌使用它的原因。但他们的文件没有给出正确的理由。然后我的问题是,原因到底是什么


那么谁知道的更多呢?或者“延迟”在谷歌的脚本中真的是毫无意义的吗?

我一直在考虑它,我会给它一个机会来回答我自己的问题;)。谷歌可能认为人们会复制/粘贴以下代码:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

。。。只需将其添加到页面的某个位置。所以在这种情况下,“推迟”是有意义的

实际上,如果您在文档末尾有一个脚本标记,并且您在上面使用了“async”,那么它也没有任何意义。但是,如果脚本标记不在文档的末尾,这是有意义的


但如果我是谷歌,我无论如何都会添加一些关于它的注释,因为如果你是一家大公司,人们会检查例子并重视它。我认识一些网站管理员,他们只是在文档末尾向脚本标记添加了async/defer,而这是唯一的一个。你可能会想:但它什么也没做,那它有什么问题吗?例如,async可以在执行JavaScipt之前增加一点额外的延迟(与sync相比)。因此,在这种情况下,在页面速度方面使用sync比在脚本标记上使用async更好。

我一直在考虑,我将尝试回答我自己的问题;)。谷歌可能认为人们会复制/粘贴以下代码:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

。。。只需将其添加到页面的某个位置。所以在这种情况下,“推迟”是有意义的

实际上,如果您在文档末尾有一个脚本标记,并且您在上面使用了“async”,那么它也没有任何意义。但是,如果脚本标记不在文档的末尾,这是有意义的

但如果我是谷歌,我无论如何都会添加一些关于它的注释,因为如果你是一家大公司,人们会检查例子并重视它。我认识一些网站管理员,他们只是在文档末尾向脚本标记添加了async/defer,而这是唯一的一个。你可能会想:但它什么也没做,那它有什么问题吗?例如,async可以在执行JavaScipt之前增加一点额外的延迟(与sync相比)。因此,在这样的情况下,最好在页面速度方面使用sync,而不是在脚本标记上使用async

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>