在HTML中使用JavaScript(如何解决延迟)

按照传统的做法,所有<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 代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟
期间的浏览器窗口中将是一片空白。为了避免这个问题,现代 Web 应用程序一般都把全部 JavaScript 引
用放在<body>元素中页面内容的后面,如下例所示:

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

或者使用defer属性(只是用于外部脚本文件)

这个属性的用途是表明脚本在执行时不会影响页
面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置
defer 属性,相当于告诉浏览器立即下载,但延迟执行。(最好只包含一个延迟脚本)

如下所示:

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

支持HTML5 的实现会忽略给嵌入脚本设置的 defer 属性。HTML5 为<script>元素定义了 async 属性。这个属性与 defer 属性类似,都用于改变处理脚本的行为。同样与 defer 类似,async 只适用于外部脚本文件,并告诉浏览器立即下载文件。但与 defer
不同的是,标记为 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>

在以上代码中,第二个脚本文件可能会在第一个脚本文件之前执行。因此,确保两者之间互不依赖
非常重要。指定 async 属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。
为此,建议异步脚本不要在加载期间修改 DOM

猜你喜欢

转载自blog.csdn.net/qq_34633111/article/details/82715486