当前位置:首页 > Web开发 > 正文

也因此这段代码是错误的

2024-03-31 Web开发

诸如以下的html文档:

<!Doctype html> <html> <head> <title>延迟脚本</title> <script src="defer.js"></script> </head> <body> <div id="target"></div> </body> </html>

此中包罗的javascript代码为:

var tg=docuemnt.getElementById("target"); tg.innerHTML="XX"; tg.style.backgroundColor="gery";

以前的浏览器对文档进行解析时,,当解析到<script>元素时,浏览器会做两件事:

1.遏制继续解析,转而按照<script>元素的src属性下载对应的js脚本文。。

2.解析执行脚本文件。

当浏览器解析执行脚本文件时,文档内并没有id为”traget“的元素,也因此这段代码是错误的。

解决上述问题的传统做法是将<script>写在<body>内部的最后面。

而延迟脚本的感化则是与之不异,即在文档页面没有完全解析之前,不同错误<script>元素进行解析。

延迟脚本如下:

<script src="defer.js" defer> <!--即在script标签内写入一个defer即可-->

异步脚本:

当脚本解析占用太多时间时,将脚本设置为异步脚本,浏览器会对脚本解析启动新线程,使得脚本解析与文档解析可以同步进行。它的感化是制止措置惩罚惩罚脚本时间过长导致页面永劫间空白。

html文档:

<!Doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title></title> <script src="async.js"></script> </head> <body> <div>XX</div> </body> </html>

js代码:

for(let i=0;i<10000;i++){ //some code }

如上代码所示:js代码需要执行循环一万次,在循环完成之前不会向下解析。

异步脚本如下:

<script src="async.js" async="async">

按照红宝书的描述:

一个页面最好只有一个延迟脚本。

延迟脚本与异步脚本都只适用于外部脚本。

建议异步加载期间不要有改削DOM的行为。

html5_延迟(defer)脚本与异步(async)脚本

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/29965.html