html中script标签使用async属性和defer属性的区别
相同点:
首先async和defer只对header里的外连脚本script标签上起作用,如果script标签是放在header外或者是header里的内置脚本以及动态生成的script标签是不起作用的。其作用是将该js脚本设置为异步加载,主要用于当外链的js文件没有操作DOM的情况。
两者区别:
使用async标志的脚步文件一旦加载完成就会立即执行;使用defer标记的脚本文件会在DOMContentloaded事件之前(也就是页面DOM加载完成时)执行。
如果有多个js脚本文件,async标记不保证按照书写的顺序执行,哪个脚本先下载结束就先执行哪个脚本。而defer标记则会按照js脚本书写顺序执行。
一般来说,如果脚本之间没有依赖关系,就使用async属性,如果脚本之间有依赖关系,就使用defer属性。如果同时使用async和defer属性,后者不起作用,浏览器的行为由async属性决定。
对于async标记,浏览器的解析过程是这样的:
- 浏览器开始解析html网页
- 解析过程中,发现带有async属性的script标签
- 浏览器继续往下解析html网页,同时并行下载script标签中的外部脚本
- 脚本下载完成,浏览器暂停解析html网页,开始执行下载的脚本
- 脚本执行完毕,浏览器恢复解析html网页
对于defer标记,浏览器的解析过程:
- 浏览器开始解析html网页
- 解析过程中,发现带有defer属性的script标签
- 浏览器继续往下解析html网页,同时并行下载script标签中的外部脚本
- 浏览器完成解析html网页,此时再执行下载的脚本
当header中同时有js脚本和外链css时,js脚本最好放外链css前面。因为如果脚本的内容是获取元素的样式,宽高等css控制的属性,浏览器是需要计算的,也就依赖于css。浏览器无法感知脚本内容到底是什么,为避免样式获取错误,因而只好等前面的所有样式下载完后,再执行js。如果css下载时间很长的话,js也无法正常运行,导致html无法正常解析出来,
转自:https://www.cnblogs.com/lvonve/p/11975593.html
html中script标签使用async属性和defer属性的区别的更多相关文章
- 【javascript】script标签的async异步解析
<script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染 ...
- html中script标签的使用方法
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素.这个元素由Netscape创造并在Netscape Navigator2中首先实现.后来,这个元素被加入到 ...
- script标签的async和defer
兼容性 IE对于defer一直都支持,async属性IE6-9都没有支持,IE10及以上支持 相同点与不同点 带有async或defer的script都会立刻下载并不阻塞页面解析,而且都提供一个可选的 ...
- JS添加验证页面中script标签中是否存在jquery文件
window.onload = function() { var al = document.getElementsByTagName("script"); var new_ele ...
- html文件中script标签放在哪里?
- JavaScript <script>标签的位置、延迟脚本(defer属性)与 异步脚本(async属性)
一.<script>标签的位置 传统的做法是将<script>元素放在<head>元素中,例如: <!DOCTYPE html><html > ...
- html5中script的async属性
html5中script的async属性 我兴奋于html5的原因之一是一些久久未能实现的特性现在可以真正运用于实际项目中了. 如我们使用placeholder效果蛮久了但是那需要javascript ...
- 怎样理解script标签的defer属性和async属性
如果script标签是引用的外部js文件, 那就会有一个下载js文件这一过程, 为了不因为这个下载过程而阻塞页面解析与渲染, 我们需要一种机制来解决这一问题, 方法之一就是使用 defer和async ...
- script标签加载顺序(defer & async)
script 拥有的属性 async:可选,表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效. charset:可选.表示通过 src 属性指 ...
随机推荐
- Axure实现提示文本单击显示后自动消失的效果
Axure实现提示文本单击显示后自动消失的效果 方法/步骤 如图所示,框出的部分为提示文本(已经命名为tooltip),希望达到的效果是默认加载时不显示,点击帮助图标后显示,且2秒后自动消失. ...
- 以太坊 Geth 环境搭建(Ubuntu)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014409380/article/details/79897335 时隔多日,我又想起来更新博客, ...
- 分组背包---P1757 通天之分组背包
P1757 通天之分组背包 题解 分组背包板子题 k组物品,每组之间相互矛盾,也就是一组里面只能选一个或者不选 分组背包其实和01背包差不多,就是多加一维枚举组数 f[k][j] 前k组中,体积不超过 ...
- P2308 添加括号
P2308 添加括号 题解 一看这题---我能AC 看完这题---我要换题 这题第二问其实就是一个链的石子合并,也就是不用处理环 所以一三问怎么处理??? 数组 mid[ i ][ j ] 记录区间 ...
- java基于jcifs.smb实现远程发送文件到服务器
1.服务器指定共享文件夹 1.1.验证服务器共享文件夹本地可以访问: 2.导入依赖的相关jar包 jcifs-1.3.**.jar: <dependency> <gr ...
- ServletConfig对象的使用
作用: * 获取Servlet的配置信息 * 获取ServletContext对象 *主要是用于加载servlet的初始化参数.在一个web应用可以存在多个ServletConfig对象(一个Serv ...
- 014-操作系统下验证下载文件的 MD5/SHA1/SHA256
一.mac 1.md5 openssl md5 /path/to/file 新的macOS默认支持:md5 filename 2.sha256 openssl dgst -sha256 /path/t ...
- Qt编写安防视频监控系统8-双击节点
一.前言 在所有的视频监控系统中,双击摄像机的节点,对应摄像机加载到当前焦点通道显示,这个都是必须具备的功能,还有一些厂家会做双击NVR节点,自动加载该NVR下的所有摄像机全部显示,从通道1开始到通道 ...
- 修改Eclipse启动时的选择工作空间
对于eclipse的默认的工作空间,如果不需要正常切换workspace的用户很方便,打开eclipse便自动进入默认的工作空间.而如果用户经常在多个workspace之间切换的话,启动eclipse ...
- 如何不让Excel图表随源数据改变而改变
如何不让Excel图表随源数据改变而改变 一般我们在用Excel时,经常会碰到一些问题,比如,如何才能不让Excel图表随源数据改变而改变呢,下面就谈一下,一般在默认情况下,Excel的图表在一个区域 ...