渲染阻塞延迟vs底部移动脚本

Rob*_*bin 22 html javascript performance asynchronous render

我假设底部的移动脚本与使用defer或async属性相同.由于defer和async并不完全符合旧版浏览器,因此我选择在页面底部加载脚本.

<html>
<body>
<!-- whole block of html -->
<script type='text/javascript' src='app.js'></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在此之前,我运行了诸如GTmatrix和Google页面速​​度洞察等性能基准测试工具.两者都显示'渲染阻塞'参数作为主要问题.我现在有点困惑,因为即使我在底部移动这些脚本以允许首先加载内容/ html; 这些工具仍然将渲染阻塞作为主要问题报告.

我确实看过其他stackoverflow帖子,突出显示虽然底部加载的脚本必须具有'defer'属性.

我有几个问题:

  1. 是真的吗?
  2. 这些工具是否专门寻找"延迟"或"异步"属性?
  3. 如果我必须推迟后备(特别是对于IE浏览器),我是否需要使用条件语句来加载IE的非延迟脚本?

请建议最好的方法.先感谢您.

Nab*_*han 5

  1. 是的,即使您的网站设计和要求可能,即使在最底部加载的脚本也必须具有defere属性

  2. 否,这些工具需要完成解析

  3. 取决于您要支持的IE版本,他们会有不同的建议

现在解释简单scriptdeferasync一个位,以帮助您了解的原因:

脚本 简单<script>标记将在此时停止解析,直到脚本下载执行为止。

异步 如果您将使用async,那么脚本将不会停止解析下载,因为它将继续与其余html内容并行下载。但是,脚本将停止执行解析,然后html的解析将继续或完成。

延迟 如果使用defer,脚本将不会停止对html数据的解析以下载或执行脚本。因此,这是避免在网页加载时间上花费任何时间的最佳方法。

请注意,defer可以减少html的解析时间,但是在每个网站设计流程中并不总是最佳或合适的选择,因此在使用时要格外小心。