script
标签用于加载脚本与执行脚本,在前端开发中可以说是非常重要的标签了。
直接使用script
脚本的话,html
会按照顺序来加载并执行脚本,在脚本加载&执行的过程中,会阻塞后续的DOM
渲染。
现在大家习惯于在页面中引用各种的第三方脚本,如果第三方服务商出现了一些小问题,比如延迟之类的,就会使得页面白屏。
好在script
提供了两种方式来解决上述问题,async
和defer
,这两个属性使得script
都不会阻塞DOM
的渲染。
但既然会存在两个属性,那么就说明,这两个属性之间肯定是有差异的。
defer
如果
script
标签设置了该属性,则浏览器会异步的下载该文件并且不会影响到后续DOM
的渲染;
如果有多个设置了defer
的script
标签存在,则会按照顺序执行所有的script
;defer
脚本会在文档渲染完毕后,DOMContentLoaded
事件调用前执行。
我们做了一个测试页面,页面中包含了两个script
标签的加载,给他们都加上defer
标识。
P.S. 为了更直观,我们给script1.js
添加了1s
的延迟,给script2.js
添加了2s
的延迟。
下图是页面加载的过程&script
脚本的输出顺序。
不难看出,虽然script1
加载用时虽然比script2
短,但因为defer
的限制,所以Ta只能等前边的脚本执行完毕后才能执行。
async
async
的设置,会使得script
脚本异步的加载并在允许的情况下执行async
的执行,并不会按着script
在页面中的顺序来执行,而是谁先加载完谁执行。
我们修改测试页面如下:
遂得到了如下的结果,页面加载时长上,并没有什么变化,毕竟都是异步加载的脚本。
但是我们可以看到一个小细节,DOMContentLoaded
事件的触发并不受async
脚本加载的影响,在脚本加载完之前,就已经触发了DOMContentLoaded
。
我们接着修改测试页面。加载一个没有延迟的script
脚本,使得脚本可以即时的加载完毕。
我们要测试一下,如果async
脚本加载的足够快,是否会在DOMContentLoaded
之前就执行(这个实验是基于对async
的描述“在允许的情况下执行”的论证)。
同时为了保证测试的稳定性,我们在script
脚本引入的后边添加了数千个空的p
节点,用来延长文档的渲染时间。
执行结果不出所料,如果给async
一定的时间,是有可能在DOMContentLoaded
事件之前就执行的。
P.S. 从上图中左上角的火焰图中,我们也能看到,出现了多段的蓝色(更新:晚上写的时候懵了,紫色的才是渲染,蓝色的是解析)文档渲染。以及下边Console
的顺序。
说明的确,async
的执行是加载完成就会去执行,而不像defer
那样要等待所有的脚本加载完后按照顺序执行。
画几张图简要说明
网上有了不少这种类似的图,但是基本都是拿一个script就举例的
未免太过寒酸,so咱们来一个豪华版,来画一下多个脚本加载时的甘特图
就像近年来各大手机厂商,出新机都喜欢来一个X+X plus
拿四个不同的颜色来标明各自代表的含义
普通script
文档解析的过程中,如果遇到script
脚本,就会停止页面的渲染进行下载(但是并不会影响后续的解析,解析和渲染是两码事儿)。
资源的下载是在解析过程中进行的,虽说script1
脚本会很快的加载完毕,但是他前边的script2
并没有加载&执行,所以他只能处于一个挂起的状态,等待script2
执行完毕后再执行。
当这两个脚本都执行完毕后,才会继续渲染页面。
defer
文档解析时,遇到设置了defer
的脚本,就会在后台进行下载,但是并不会阻止文档的渲染,当页面解析&渲染完毕后。
会等到所有的defer
脚本加载完毕并按照顺序执行,执行完毕后会触发DOMContentLoaded
事件。
async
async
脚本会在加载完毕后执行。async
脚本的加载不计入DOMContentLoaded
事件统计,也就是说下图两种情况都是有可能发生的
推荐的应用场景
defer
如果你的脚本代码依赖于页面中的DOM
元素(文档是否渲染完毕),或者被其他脚本文件依赖。
例:
评论框
代码语法高亮
polyfill.js
async
如果你的脚本并不关心页面中的DOM
元素(文档是否渲染完毕),并且也不会产生其他脚本需要的数据
以上是script标签中的async和defer用法的详细内容。更多信息请关注PHP中文网其他相关文章!

async是es7的。async和await是ES7中新增内容,是对于异步操作的解决方案;async/await可以说是co模块和生成器函数的语法糖,用更加清晰的语义解决js异步代码。async顾名思义是“异步”的意思,async用于声明一个函数是异步的;async和await有一个严格规定,两者都离不开对方,且await只能写在async函数中。

script是指剧本或脚本的意思。在电影、电视、戏剧等艺术形式中,script用于描述角色的对话、动作和场景,以及故事的发展和结构。script的编写需要一定的技巧和经验,而且应该生动、有力,能够吸引观众的注意力,并传达出故事的情感和主题。script在电影和电视行业中尤为重要,是创作的基础,决定了电影的故事情节、角色发展和对话内容。script是艺术家们创作和表达的重要工具。

搭建vue3的项目创建项目前这里我们首先要说明的是,我们使用的版本情况Nodejs:v17.5.0pnpm:7.0.0Vue:3.2.25首先我们Vite创建一个vue3的项目demo,名字就叫FormValidate,我们在命令行输入命令pnpmcreateviteFormValidate回车然后选择vue继续回车,说明我们已经初步创建了FormValidate(表单验证)项目根据命令行的提示,我们进入项目根目录,然后使用命令pnpminstall安装项目需要的依赖,当然这里使用pnpm是比n

计算机科学领域中,"script"通常表示一种脚本语言或脚本文件,脚本语言是一种解释性编程语言,通常用于自动化、批处理和快速原型开发等任务。

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。详细介绍:1、检查语法错误:Script Error可能是由于JavaScript代码中存在语法错误导致的,使用开发者工具来检查代码并修复语法错误,确保代码中的括号、引号、分号等都是正确的等等。

Go语言中的defer关键字是什么?在编写程序时,我们经常需要在某个函数或方法执行完毕后,执行一些清理或资源释放工作。这个时候,Go语言提供了一种方便的机制,通过使用defer关键字,可以将这些清理或资源释放工作推迟到函数或方法返回之前执行。defer关键字是一个编译时解析的语法糖,它通过将一个函数或方法的调用推迟到当前函数或方法返回之前执行,

协程:协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行Python对协程的支持是通过generator实现的。在generator中,我们不但可以通过for循环来迭代,还可以不断调用next()函数获取由yield语句返回的下一个值。但是Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。一、什么是generator(生成器)在Python中,这种一边循环一边计算的机制,称为生成器:gene

一.传统的Sync语法请求例子还是一样, 在了解Async语法的实现之前, 先从一个Sync的语法例子开始, 现在假设有一个HTTP请求, 这个程序会通过这个请求获取对应的响应内容, 并打印出来, 代码如下:import socket def request(host: str) -> None: """模拟请求并打印响应体""" url: str = f"http://{host}" sock


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1
功能强大的PHP集成开发环境