文档渲染过程

下面这样一段 html,在浏览器中打开,打上断点的效果如下面两张图所示,可见,js 的解析会终止 html 的渲染。

<html>
<body>
    <div>1</div>
    <script>
    let div1 = document.getElementsByTagName('div')[0]
    div1.innerText = 'time.geekbang'
    </script>
    <div>test</div>
</body>
</html>
复制代码

image.png

image.png

而如果将这段 js 代码以 script 标签的形式插入的话,等加载到这里的时候就会引入网络进程来下载 js 代码,解析 html 文档也会被中断。

<html>
<body>
    <div>1</div>
    <script type="text/javascript" src='foo.js'></script>
    <div>test</div>
</body>
</html>
复制代码

另外,如果 JavaScript 文件中没有操作 DOM 相关代码,就可以将该 JavaScript 脚本设置为异步加载,通过 async 或 defer 来标记代码

async 和 defer 虽然都是异步的,不过还有一些差异,使用 async 标志的脚本文件一旦加载完成,会立即执行;而使用了 defer 标记的脚本文件,需要在 DOMContentLoaded 事件之前执行。

可见为了减少 js 的解析对 html 解析的影响,影响最小的应该是 defer,然后是 async。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享