进入一个网站后,开始显示下载,并解析资源。
这个过程是从<html>开始,直到</html>,意即从上往下的过程。比方说,一个页面有3个js
<!DOCTYPE html>
<html lang='zh-Cn'>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./first.js"></script>
<script src="./second.js"></script>
<script src="./third.js"></script>
</head>
<body>
Content
</body>
</html>
这种情况下,几个js文件中先完成first.js的下载解析(下载好并执行完),然后再到second.js的下载解析,以此类推。
因为js都还没下载解析好,所以还没能进入显示页面的行为。可能会导致页面显示出来后先是一片空白,用户体验不好。
解决方式:
- 通过async,defer属性,让js立刻开始异步下载。
- 把js放在上述例子中,body内页面内容的最下方(</body>标签的前面)
第一种:
js开始异步下载后,就不管了直接进入页面的显示处理。
async与defer的区别是,前者不能保证标有async的脚本们的执行先后顺序,哪个先下载完就哪个先执行。后者是按照js的声明顺序解析的。
第二种:
从<html>到</html>的过程中,除去津贴</body>前那一坨script元素外,内容已经显示了,然后才遇到js后开始下载解析js。所以就没妨碍页面显示。