首页 > 试题广场 >

说一说defer和async区别?

[问答题]
html文件都是按顺序执行的,script标签中没有加defer和async时,浏览器在解析文档时遇到script标签就会停止解析阻塞文档解析,先加载JS文件,加载完之后立即执行,执行完毕后才能继续解析文档。 而在script标签中写入defer或者async时,就会使JS文件异步加载,即html执行到script标签时,JS加载和文档解析同时进行,而async是在JS加载完成后立即执行JS脚本,阻塞文档解析,而defer则是JS加载完成后,在文档解析完成后执行JS脚本
发表于 2022-05-03 16:22:53 回复(5)
defer和async加载script和html解析同时进行,加载完script,async立刻执行,defer在html解析结束后执行
发表于 2022-06-25 19:39:06 回复(0)
defer和async共同点:使得html和js的加载可以同时进行。 defer:js加载完后不会立刻执行,会等到html加载完解析完成才会执行 async:js加载完后会立即执行,并阻塞html解析(谁先加载完谁先执行)
发表于 2022-08-19 21:56:58 回复(0)
1.默认情况html解析为同步执行 2. defer和async使html解析变为异步(异步解析html和js) 3.async在解析了js后就会执行 4.defer在html和js都解析完才执行
发表于 2022-10-07 17:18:50 回复(0)
让文档解析和js加载 同时进行, async是js加载结束后立即执行js脚本,从而阻碍文档解析,而defer则是JS加载完成后,在文档解析结束后执行js脚本
发表于 2022-09-07 16:04:45 回复(0)
https://blog.csdn.net/qq_27674439/article/details/101316754
发表于 2022-06-11 17:05:01 回复(0)
html文档都是从上到下按照顺序执行。当scrip标签没有加defer或者是async属性时,当文档遇到script标签,会直接加载JS脚本,阻塞文档的解析,加载完成之后立即执行,执行完以后再继续解析文档。而在script标签中写入defer或者async时就会使JS异步加载,即html执行到script标签时,JS脚本的加载和Html文档的解析同时进行,而async是在js脚本加载完成以后立即执行,而defer是在js脚本加载完,并且html文档解析完毕后,再执行js
发表于 2022-08-04 15:57:22 回复(0)
1.defer和async在网络读取(下载)这一阶段是一样的,相对于html解析来说都是异步的。 2.两者之间的差别是script脚本下载完后何时执行。defer是最接近我们对于应用脚本加载和执行要求的。 3.对async而言,脚本的加载和执行是紧挨着的,不管声明顺序如何,只要加载完就会立即执行。 4.async 对于应用脚本的用处不大,因为它完全不考虑依赖(哪怕是最低级的顺序执行),不过它对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适的,最典型的例子:Google Analytics。
发表于 2022-05-23 10:32:14 回复(0)
当没有async和defer这两个属性的时候,浏览器会立即加载并执行指定的脚本。当遇到外部的script会先加载并执行,其实这样会阻塞html的解析。只有这个script加载执行完毕后,才会再进入dom的解析。 有async时,加载和渲染后面元素的过程将和script的加载和执行并行进行(异步)。 有defer时,加载和渲染后面元素的过程将和script的加载并行进行(异步),但是它的执行事件要等所有元素解析完成之后才会执行。
发表于 2023-04-15 21:39:19 回复(0)
html文件都是按照顺序执行的,当script标签没有defer和async时,浏览器在解析文档时遇到script标签就会停止解析、阻止文档解析。先加载js文件,加载完毕后立即执行js脚本;执行完毕后才能继续解析。当script标签写入defer或async时,就会使js异步加载,即html文件执行到script标签时,js文件加载和文档解析同时进行。async是js文件加载完毕后立即执行js脚本,阻塞文档解析;defer是js文件加载完毕后解析文档,文档解析完毕后再执行js脚本。
发表于 2022-07-26 17:42:28 回复(0)
浏览器会立即加载js文件并执行指定的脚本,‘立即’指的是在渲染script标签下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行,加上async属性,加载js文档和渲染文档可以同时进行(异步),当js加载完成,js代码立即执行,会阻塞HTML渲染。加上defer,加载后续文档元素的过程将和script.js的加载并行进行(异步),当HTML渲染完成,才会执行js代码。渲染阻塞的原因是由于JavaScript是可操作dom的,如果在修改这些元素属性的同时渲染界面(既JavaScript线程和ui线程同时运行),那么渲染线程前后获得的元素数据就可能不一致了。因此为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JavaScript引擎为互斥的关系。当浏览器在执行Javascript程序的时候,GUI渲染线程会被保存在一个队列中,直到js程序执行完成才会接着执行。如果js执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
发表于 2022-07-18 14:59:17 回复(0)
都是为了不阻塞主线成,异步加载,defer是加载完之后不立即执行,async是在文档加载完之后执行JS脚本。
编辑于 2024-04-24 13:44:49 回复(0)
async在加载完脚本后会立即执行,这个时候会停止对html的解析,等脚本执行完成继续解析html,defer在加载玩脚本不会立即执行,在html解析完成再继续执行脚本 defer会按照脚本加载顺序依次执行,async不能保证执行顺序
编辑于 2024-04-08 18:14:38 回复(0)
defer: 等其他资源依赖资源加载完后,最后加载的资源。可理解为主程序启动资源 async:可异步加载的脚本
编辑于 2024-03-13 09:53:07 回复(0)
defer 属性的脚本会在HTML解析时下载,并在HTML解析完成后执行; async属性的脚本会在遇到该脚本时开始下载,并在下载完成后立马执行,不会影响到HTML的解析,与之并行;
编辑于 2024-02-27 22:41:08 回复(0)
defer和async共同点:使得html和js的加载可以同时进行。 defer:js加载完后不会立刻执行,会等到html加载完解析完成才会执行 async:js加载完后会立即执行,并阻塞html解析(谁先加载完谁先执行)
发表于 2023-10-23 11:24:23 回复(0)
async和defer都是加载js脚本和html的解析同时进行 defer:无论脚本是在何时加载完的,都要等html解析完了之后再执行脚本 async:脚本加载完毕后就直接执行
发表于 2023-10-08 19:59:23 回复(0)
默认情况下html和js是同步执行的,defer和async都可以让他们变为异步。区别是使用defer时,js加载完后不会立即执行,而是等到html加载解析完才执行。而async在js加载后会立即执行,并阻塞html(谁先加载完谁先执行)
发表于 2023-09-25 01:20:16 回复(0)
html文件都是按顺序执行的,script标签中没有defer 和async时,浏览器在解析文档时遇到script标签就会停止解析,阻塞文档解析,先加载JS文件,加载完成后立即执行,执行完毕才能继续解析文档。 defer和async都使得html和js的加载可以同时进行: defer:js加载完不会立即执行,会等到html加载完解析完才会执行 async:js加载完会立即执行,并阻塞html解析(谁先加载完谁先执行)
发表于 2023-09-04 19:33:39 回复(0)
html文件都是按顺序执行的,script标签中没有加defer和async时,浏览器在解析文档时遇到script标签就会停止解析阻塞文档解析,先加载JS文件,加载完之后立即执行,执行完毕后才能继续解析文档。 而在script标签中写入defer或者async时,就会使JS文件异步加载,即html执行到script标签时,JS加载和文档解析同时进行 而async是在JS加载完成后立即执行JS脚本,阻塞文档解析,而defer则是JS加载完成后,在文档解析完成后执行JS脚本
发表于 2023-08-22 09:29:53 回复(0)