script标签

2019-05-13  本文已影响0人  pengtoxen

标签的位置

按照传统的做法,所有<script>元素都应该放在页面的<head>元素中

<!DOCTYPE html>
<html>
 <head>
 <title>Example HTML Page</title>
 <script type="text/javascript" src="example1.js"></script>
 <script type="text/javascript" src="example2.js"></script>
 </head>
 <body>
 <!-- 这里放内容 -->
 </body>
</html>

这种做法的目的就是把所有外部文件(包括 CSS 文件和 JavaScript 文件)的引用都放在相同的地方.可是,在文档的<head>元素中包含所有 JavaScript 文件,意味着必须等到全部 JavaScript代码都被下载,解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容).对于
那些需要很多 JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白.

defer

HTML 4.01 为<script>标签定义了 defer属性.这个属性的用途是表明脚本在执行时不会影响页面的构造.也就是说,脚本会被延迟到整个页面都解析完毕后再运行.因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行.

<!DOCTYPE html>
<html>
 <head>
 <title>Example HTML Page</title>
 <script type="text/javascript" defer="defer" src="example1.js"></script>
 <script type="text/javascript" defer="defer" src="example2.js"></script>
 </head>
 <body>
 <!-- 这里放内容 -->
 </body>
</html>

上面是HTML5的规范, 但是然并卵,实际情况是延迟脚本不一定依次执行,也不会在DOMContentLoaded之前执行

async

<!DOCTYPE html>
<html>
 <head>
 <title>Example HTML Page</title>
 <script type="text/javascript" async src="example1.js"></script>
 <script type="text/javascript" async src="example2.js"></script>
 </head>
 <body>
 <!-- 这里放内容 -->
 </body>
</html> 

异步脚本与延迟脚本类似,唯一不同点是异步脚本的加载顺序是随机的,互相不依赖的.上面例子中的脚本可能第一个先加载也可能第二个先加载.另外异步脚本一定会在load事件之前执行.

小结

上一篇下一篇

猜你喜欢

热点阅读