关于script标签的defer和async

背景

最近开发的过程中遇到一个问题:页面中加载了一个改写fetch的js文件,然后后面使用了fetch发送请求。发现在实际上,并没有实现对fetch的改写,而是使用了原生的fetch。初步怀疑是由于js的加载顺序导致了问题的出现,也就是说在使用fetch的代码执行之前,改写fetch的代码还未加载执行完成,所以没有实现对它的改写。
实际上并不是因为这个,而是因为改写fetch的js文件放在另外一个系统文件中,而这个系统是需要登录的,但是在本地开发中,是不做登录验证的,即使没有登录也不会拉起CAS登录,所以文件加载失败了,改写也没有成功。
即使如此,还是需要补充一点关于script标签加载js的知识。

基础知识

script标签需要放在body最后,这是开发中一直坚持的习惯,为什么这样做呢?因为js的加载和执行会阻塞后续html的解析和渲染。如果一个script标签放在html中间,当执行到这一句时,会停止对html的解析和渲染,转而进行js的加载和执行,结束以后,再继续后面的内容。

defer和asnyc

1.defer

这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在

你可能感兴趣的:(关于script标签的defer和async)