JS:引入及阻塞

引入JS的两种方式:

①嵌入代码:在HTML中使用(可以有多个代码块)

②引入外部文件:下载、解析、执行(从上往下)

问题?

①:为什么元素获取不到?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="index1.js"></script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>

js代码部分:(获取到div1所对应的元素)

var div1 = document.getElementById("div1");
console.log(div1);

控制台结果:(显示null:即没有获取到元素。)

原因:HTML从上往下执行,按顺序,所以先下载、解析、执行了<script>外部文件。而位于后面的div元素还没有被解析,所以没有获取到 div元素。

解决方案:将<script src="index1.js"></script>写到body元素中的最后。

②:为什么页面显示那么慢?(解决方法同问题①)

原因:需花时间来下载、解析、执行js脚本,需花更多时间等待效果,用户体验感差。

阻塞加载:表示应该立即下载脚本,阻塞页面中的其他操作。(以上不对js做任何处理的就是阻塞加载)

延迟加载(defer):表示脚本可以延迟到文档完全被解析和显示之后再执行。

 <script  defer src="index1.js"></script>

异步加载(async):表示应该立即下载脚本,但不应妨碍页面中的其他操作。(影响部分文档)

 <script async src="index1.js"></script>

示意图:(绿色为js文件下载解析、执行)延迟加载和异步加载时又开了一个线程,并发执行

总结:

延迟加载:1、并发

                   2、多个js,按定义的顺序执行

                   3、在文档解析完,才执行(HTML)

                   4、在DOMContentLoaded事件之间执行完

                   5、只支持外部引入方式(IE7以前的除外)

异步加载:1、并发

                  2、多个js,不一定按顺序执行

                  3、加载完就执行,在load事件之前(JS)

                  4、在load事件之前执行完

                  5、只支持外部引入方式

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值