hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • HTML&CSS

    • CSS布局模型详细介绍
    • flex布局
    • 1ink与@import的区别
    • CSS样式之内容居中方法
    • DIV+CSS布局
    • 有趣的list-style
    • CSS选择符的权重
    • 浏览器异步加载JS的方法
      • 浏览器加载JS的方法
      • 浏览器渲染规则
      • 浏览器的异步加载
      • 浏览器ES6模块支持
  • HTML

  • CSS

  • CSS预处理

  • 页面
  • HTML&CSS
hn-failte
2020-04-29

浏览器异步加载JS的方法

# 浏览器异步加载JS的方法

浏览器异步加载JS有哪些方法?defer和async有什么区别?module加载是怎么样的?

# 浏览器加载JS的方法

说到这个,最常见的就是内置JS和外联JS了

内置:

<script>
console.log('加载完成')
</script>
1
2
3

外联:

<script src="" type="application/javascript"></script>
1

而后,由于浏览器默认的脚本语言为JavaScript,因此type属性可以去掉。

<script src=""></script>
1

# 浏览器渲染规则

浏览器的渲染规则是,从上到下加载,正常情况下加载完马上就会执行。

CSS文件可以边加载边渲染,而JS文件必须等到加载完成才能渲染。

若在加载过程中遇到大体积的JS文件,则会等到JS加载完后才会继续渲染,对整个页面的加载造成阻塞。

# 浏览器的异步加载

而为了解决加载阻塞问题,浏览器提供了defer属性和async属性。

那么,defer和async有什么区别呢?

给script标签加上defer属性,其内部的JS会在整个页面加载完成后才执行。这个加载完包括整个页面的渲染和其他脚本的执行。存在多个defer时,会按照顺序执行。

而若是加上async属性,JS会在该script标签加载完后执行。这个加载完成后会中断渲染来执行。执行完成后再继续渲染。由于加载速度是不确定的,多个async脚本之间无法确保执行顺序。

# 浏览器ES6模块支持

在ES6中,添加了JS模块化的标准,在script标签上添加type="module"即可声明为ES6模块。

<script type="module" src=""></script>
1

对添加了type="module"的标签,浏览器默认会对其进行defer属性的处理,即等到整个页面加载完成后再执行,同时,也可以添加async标签,这样,该标签会在加载完成后执行。

<script type="module" src="" async></script>
1

同时,添加了type="module"的标签也可以直接内嵌,这样浏览器会按照默认的加载方式加载。

<script type="module">
    import moduleA from './moduleA.js'
	console.log('加载完成')
</script>
1
2
3
4
编辑 (opens new window)
#Async#JavaScript
上次更新: 2021/08/05, 12:37:41
CSS选择符的权重
常用meta整理

← CSS选择符的权重 常用meta整理→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式