美文网首页
JS异步加载

JS异步加载

作者: cendechen | 来源:发表于2018-08-30 12:52 被阅读0次

最近做一个H5项目,一套代码跑在多个app webview,这个地方涉及到很多js文件的引入和加载,做了一个js加载逻辑

怎么异步加载script

async vs defer attributes
这个两个属性在script标签上,已经开始支持了

script 属性

defer 属性是一个布尔属性。
defer 属性规定当页面已完成加载后,才会执行脚本。
注意:defer 属性仅适用于外部脚本(只有在使用 src 属性时)。
注意:有多种执行外部脚本的方法:
如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行
如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本

html加载过程

图例


图例

<script>

如果script标签没有任何属性,页面加载顺序如下

浏览器加载时间序列

<script async>

异步下载,可以和html解析同时进行,但是执行时会阻塞html的解析

浏览器加载时间序列

<script defer>

设置成defer属性,js的执行,会放到页面解析完成后才执行

浏览器加载时间序列

使用情况

使用这个两个属性有如下规则

  1. 如果一个并不依赖其他模块化的js文件,可以使用async属性
  2. 如果一个js文件,依赖其他js库和文件,建议使用defer属性
  3. 如果一个脚本本身很小,并且被脚本依赖,建议直接放到头部加载

支持情况

ie9 及以下,不支持defer属性,ie9以下不建议使用defer属性,
async 是HTML5的属性,这个是异步加载

参考

参考文档
github

相关文章

  • js加载同步还是异步? JSONP原理?

    1、浏览器端的js加载默认是同步还是异步?同步,可以人为设置异步;async让js异步加载,需要每个script标...

  • java_Ajax

    Ajax:(asynchronous js and xml) 异步的js和xml 指的是一种交互方式 异步加载,客...

  • 系统源码简析

    同步加载 异步加载 页面的懒加载,只针对vue文件,js文件被放到app.js中了, 比如 share.js。 a...

  • js面试题-3(ajax)

    1. 阐述一下异步加载 JS 异步加载的方案: 动态插入script标签 通过ajax去获取js代码,然后通过e...

  • JS异步加载

    最近做一个H5项目,一套代码跑在多个app webview,这个地方涉及到很多js文件的引入和加载,做了一个js加...

  • JS异步加载

    1. defer 属性 在 元素中设置 defer 属性,等于告诉浏览器立即下载,但延迟执行。defer属性只适...

  • 网页优化

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

  • Review JavaScript

    红宝书 综合 script加载js会阻塞渲染,标签中 fefer 指异步加载js,在文档load之后按顺序执行。a...

  • JavaScript补充

    01-延迟和异步加载JS 如何延迟加载JS:defer defer:js脚本可以延迟到文档完全被解析后执行 如何异...

  • require.js 的使用

    require.js 优点:1.异步加载文件 防止 html页面引入多个js 文件。 ...

网友评论

      本文标题:JS异步加载

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