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 属性指 ...
随机推荐
- arcgis python 随机取部分数据
# -*- coding: cp936 -*- import arcpy import os import ylpy import random def main(): num=ylpy.getCou ...
- [oracle]oracle表在什么情况下会被锁住(转载)
DML锁又可以分为,行锁.表锁.死锁 行锁:当事务执行数据库插入.更新.删除操作时,该事务自动获得操作表中操作行的排它锁. 表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它 ...
- centos下使用virtualenv建立python虚拟环境
在centos使用python3的virtualenv,先用yum install python3 安装后pip3也已经安装好了,pip3 install virtualenv, 在系统中新建一个空文 ...
- 三种单点登录SSO的实现原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- PAT 甲级 1017 Queueing at Bank (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)
1017 Queueing at Bank (25 分) Suppose a bank has K windows open for service. There is a yellow line ...
- 取消一个本地svn目录与svn的联系
第一种方法: 直接.逐级地删除目标目录中的隐藏属性的.svn目录 这个方法试了,好牛蛋...,省事,快速... 第二种方法: 如果用的是TortoiseSVN客户端,则先在另外一处建立一个新目录A,右 ...
- 利用官方的ucosiii包中测试板的工程移植到属于自己的开发板(stmf103ZE)上
ucosIII官方下载地址:https://www.micrium.com 第一:是不是ucosIII:第二,工具链是不是keil(我用的是keil,如何用的是IAR就选有IAR的):第三MCU是不是 ...
- flask上下管理文相关 - RequestContetxt & AppContext对象
RequestContetxt / AppContext对象 1.flask程序启动时 当flask程序启动时,通过源码可知,首先会创建两个LocalStack对象,二者内部会分别创建Local对象( ...
- beego conf配置文件
1. 多个配置文件通过include引入 自定义配置文件mysql.conf 在app.conf 中引入mysql.conf include "mysql.conf"
- 1. PHP基本语法规则
1.1 PHP标记: PHP语言,是一种可以嵌入到“html”代码中的后台处理语言(程序) 有以下几种标记形式,只推荐第一种. 1,<?php php代码写在这里..... ?> ...