前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Script标签的async和defer

Script标签的async和defer

作者头像
wade
发布2020-04-24 11:55:45
6210
发布2020-04-24 11:55:45
举报
文章被收录于专栏:coding个人笔记coding个人笔记

之前有写过HTML页面渲染过程,知道了JavaScript是会阻塞DOM解析的,所以我们会把script标签放到底部防止阻塞HTML解析。其实script还有两个属性,async和defer,也是可以使得JavaScript和DOM和css同步加载。

说着两个属性之前先简单说一下DOMContentLoaded和load。

DOMContentLoaded:DOM内容加载完毕,页面会展示内容,但是图片、音视频等资源还未加载就触发DOMContentLoaded事件。

Load:在DOMContentLoaded触发之后触发,这时候图片、音视频等资源也已经加载完毕了。

知道了这两个事件之后,我们来说说async和defer。这两个都是用来控制外部脚本文件的,就是使用script引入,有src属性,在script标签没有src属性的内联脚本是无效的。这两个都不会阻塞HTML的解析。

Defer:开启新的线程下载脚本,使HTML解析完成后执行。如果多个脚本同时生命defer,会按顺序下载和执行,同时会在DOMContentLoaded和load之前执行。意思就是如果HTML解析完成了,脚本还没加载完成,那么一定会等脚本加载完成了才触发DOMContentLoaded。(网上有说defer也不一定按顺序,这个不知道什么情况下不按顺序)

Async:H5新增属性,也是用于异步加载脚本,下载完毕立即执行。有多个脚本使用async的时候,不能保证顺序,如果脚本直接有依赖,是不能使用这个属性。Async会在load之前执行,但是不保证和DOMContentLoaded的执行顺序。

另外说一个跟HTML渲染的小知识点,我们在网络很卡的情况下,标签出来了,样式没有出来,之前说的是DOM和css构建出render树才能渲染页面,然后就觉得很矛盾,突然看见有文章说现代浏览器为了更好的用户体验,渲染引擎尽快渲染内容,现在已经不会等所有HTML解析之前开始构建和布局render树,部分内容将提前渲染,就是说并不是一定要DOM和css都解析加载完成构建render树之后才渲染页面。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档