异步加载脚本

作者: 寿木 | 来源:发表于2017-09-15 11:06 被阅读42次

因为JavaScript具有两个特性:

  • JavaScript会阻塞后面内容的呈现
  • JavaScript会阻塞其后组件的下载

因此为了能保证最基本的浏览需求,所以有时候会考虑到异步加载。

利用 async或者defer异步延迟加载脚本

如果没有async或者defer,浏览器在读取到JavaScript时会立即加载并执行指定的脚本。但是,JavaScript是对文档的元素进行操作,如果没有解析Html直接加载JavaScript,有可能会出现报错。

用法:

async:相对于页面的其他部分异步执行。作用是不让页面等待两个或两个以上的脚本下载和执行,从而异步加载页面的其他内容。

<!DOCTYPE html>
<head>
    <title>title</title>
    <script type="text/javascript" async src="a.js"></script> 
    <script type="text/javascript" async src="b.js"></script>
</head>
<body>
    <!-- 内容 --> 
</body>
</html>

因为async属性是HTML5新增属性,需要Chrome、FireFox、IE9+浏览器支持,并且不保证加载顺序。

defer:延迟到整个页面都解析完毕后在执行。

<!DOCTYPE html>
<head>
    <title>title</title>
    <script type="text/javascript" defer src="a.js"></script> 
    <script type="text/javascript" defer src="b.js"></script>
</head>
<body>
    <!-- 内容 --> 
</body>
</html>

兼容所有浏览器。理论上确保所有设置了defer属性的脚本按顺序执行。

共同点:

  • 设置了async或者defer属性的脚本不会阻塞页面渲染
  • asyncdefer属性决定了js脚本的执行方式,内联脚本会忽略这两个属性。仅针对外部脚本起作用
  • 使用这两个属性的脚本中不能调用document.write

区别:

异步脚本一定会在页面的load事件前执行,但可能在DOMContentLoaded事件触发之前或之后执行,所以可能出现无序加载js的情况;延迟脚本在文档完成解析后,执行理论上是有序的,但现实中并不能保证顺序,也不一定会在DOMContentLoaded事件触发前执行。

相关文章

  • H5 资源异步加载策略

    1、async & defer 区别async异步加载脚本,加载完立马执行defer异步加载脚本,并在DOMCon...

  • 异步加载JS脚本

    异步处理外部脚本总结 Dynamic Script Element 通常我们加载JS脚本...

  • 异步加载脚本

    因为JavaScript具有两个特性: JavaScript会阻塞后面内容的呈现 JavaScript会阻塞其后组...

  • 优化

    提升页面性能的方法有哪些? 资源压缩合并,减少http请求 非核心代码异步加载异步加载的方式动态脚本加载defer...

  • 网页优化

    1. 资源代码压缩合并,减少HTTP请求 2. 非核心代码的异步加载 异步加载方式:动态脚本加载(js创建SCRI...

  • js性能优化

    无阻塞式加载脚本-延迟脚本 在script标签上添加defer(延迟脚本)或者async(异步脚本)属性。相同点:...

  • 4-3 页面性能

    提升页面性能的方法有哪些?资源压缩合并,减少 HTTP 请求非核心代码异步加载异步加载的方式动态脚本的加载(通过d...

  • 系统学习 JavaScript 的笔记【1】

    JavaScript 在HTML中的标签位置 延迟脚本与异步脚本的区别 延迟脚本 脚本的加载不会影响页面布局,,可...

  • 前端面试题

    基础知识 延迟脚本(defer)、异步脚步(async)defer: 异步加载,HTML渲染完成,再执行;asyn...

  • 浏览器加载机制 & 白屏和FOUC演示

    如何异步加载脚本? 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 s...

网友评论

    本文标题:异步加载脚本

    本文链接:https://www.haomeiwen.com/subject/bdcssxtx.html