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

延迟脚本:

诸如以下的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的行为。

原文地址:https://www.cnblogs.com/Syinho/p/12325557.html

时间: 2024-08-04 09:05:40

html5_延迟(defer)脚本与异步(async)脚本的相关文章

原生 JS 中 延迟脚本和异步脚本

一.延迟脚本 defer HTML4.0中为<script> 标签添加了个defer属性.属性的用途是表民脚本在执行时不会影响页面的构造. 脚本会被延迟到页面加载完毕的时候,执行.也就是当浏览器解析到</html> 标签后才会执行代码.在HTML5规范中,defer属性中适用于外部脚本. 而家了defer  的脚本文件会比DOMContentLoaded事件触发前执行. 二.异步脚本 async HTML5为<script>添加了个async属性.这个属性与defer属

JavaScript值延迟脚本和异步脚本

Html 4.0为<script>标签定义了defer属性,这个属性的用途是表名脚本在执行时,不会影响页面的构造.也就是说,脚本会延迟到整个页面解析完毕之后在运行,因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行.但是有一种特殊情况,看如下代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C

异步执行脚本

异步执行脚本 script 元素的 async 属性可以使关联脚本相对于页面的其余部分进行异步加载和执行. 也就是说,在继续对页面进行解析的同时,在后台加载并执行脚本.如果页面使用了要占用大量处理时间的脚本,那么使用 async 属性可以显著提高页面加载性能. async 属性. async 属性是万维网联合会 (W3C)  HTML5 规范的一部分,它是为以下情形设计的:对于脚本不存在依赖关系,但是脚本仍需要尽快运行.在以下假设示例中,如果不使用 async(或 defer)属性,则脚本可能会

多线程异步执行脚本

获取远程计算机信息: $d=get-date $servers="10.4.34.41","10.4.34.40","10.4.34.36","10.4.34.37","10.4.34.39" $serverpass="Dell1950" $UserName="Administrator" #定义线程数量$throttleLimit = 5$SessionState

经典实用的自动创建Bash脚本文件头的脚本

今天给大家展示一下,我自己写的一个自动创建Bash脚本文件头的脚本(名为create),希望能对初学脚本者带来一定的思维提示.毕竟对于一个经常写脚本的运维人员来说,每次写脚本的时候都需要重复的去写一遍文件头,也是一件很累赘的事情,既然我们学了脚本,为什么不让它来为我们减轻一下负担了.所以一个自动创建Bash脚本文件头的想法在我脑海里面产生了. 本脚本所需要实现的功能: 1,能够自动创建一个标准的Bash脚本文件头,带有详细注释信息 2,能够给新建完成的Bash脚本文件自动添加执行权限 [[ema

同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:   同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事.   例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个

如果动态的执行java脚本,这个在脚本公式配置的时候很方便

package com.bfrj.core.groovy; import java.util.HashMap; import java.util.Map; import org.jeecgframework.core.util.ApplicationContextUtil; import org.springframework.context.ApplicationContext; /** * 公式计算 * */ public class GroovyParse { /** * 公式解析计算 *

实用脚本 3 -- 进程查看脚本

分享一个进程查看脚本(rlook),方便进程查看: 1.添加脚本,内容如下: #!/bin/kshcd $HOME/binps -u $LOGNAME|egrep " \progress1| \            progress2| \progress3| \" > $HOME/log/tmp.csclearecho ""echo "press <return> to check $LOGNAME system status\c&q

Linux Shell脚本编写——构建基本脚本(一)

创建shell脚本 在创建shell脚本文件,必须在文件的第一行指定要使用的shell,其格式为: #!/bin/bash 创建.执行sh脚本 代码1-1 [email protected]:/data# cat demo1 #/bin/bash date who [email protected]:/data# ls -l total 4 -rw-r--r-- 1 root root 21 Dec 1 13:59 demo1 [email protected]:/data# chmod u+x