javascript脚本的延时加载

向HTML页面中插入js代码的主要方法是使用<script>标签,在实际的开发中多采用外部文件的方式,主要考虑到外部js代码的可维护性及可缓存性等优点。传统的做法是将所有的外部文件放在<head>元素中,这意味着等到所有的javascript代码都被下载、解析和执行之后,再开始渲染页面内容。这种情况下,当加载的外部js代码很多的时候,会导致浏览器渲染页面出现明显的延时,延时期间窗口会显示一片空白,即所谓的假死状态,也成为阻塞状态。

为了避免这种“假死”状态的出现,我们一般建议将外部js代码放在<body>元素之后加载。

defer延时脚本

为了更好的解决页面渲染出现阻塞问题,在HTNL4.01中为<script>标签定义了defer属性,改属性只适用于外部脚本,其意图是在加载或执行脚本时不影响DOM的渲染。

<html>
<head>
<script type="text/javascript" defer="defer" src="demo1.js"></script>
<script type="text/javascript" defer="defer" src="demo2.js"></script>
</head>
<body>
//DOM创建等操作
</body>
</html>

上文代码中加入了两个外部script脚本,且其中都设置了defer属性,相当于告诉浏览器,立即下载脚本,但延时执行,在整个DOM加载完成后再执行。

另外,在HTML5中要求脚本按照期出现的先后顺序执行,即demo1要先于demo2执行,且两者都要先于DOMContentLoaded事件执行,而在现实中延时脚本不一定会按顺序执行,也不一定在DOMContentLoaded事件触发前执行,因此建议在页面中只包含一个延时脚本。

async异步加载

async表示异步,是单词asynchronous[异步的]简写。顾名思义,该属性表示异步加载脚本,与defer属性一样,也只适用于外部脚本。

async属性通知浏览器立刻下载脚本,与defer不同的是,async并不保证它们的先后执行顺序。async属性是为了让页面实现异步加载,而无需等待脚本的加载和执行。

<html>
<head>
<script type="text/javascript" async src="demo1.js"></script>
<script type="text/javascript" async src="demo2.js"></script>
</head>
<body>
//DOM创建等操作
</body>
</html>

在上述代码中,第二个脚本可能会优先于第一个脚本执行,因此一定要保证两个脚本之间没有依赖关系。

javascript脚本的延时加载的更多相关文章

  1. javascript异步延时加载及判断是否已加载js/css文件

    <html> <head> <script type="text/javascript"> /**======================= ...

  2. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  3. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  4. 基于javascript实现图片懒加载(亲测有效)

    这篇文章主要介绍了javascript实现图片懒加载的方法及思路,有时我们需要用懒加载,也就是延迟加载图片的方式,来提高网站的亲和力,需要的朋友可以参考下! 一.定义 图片延迟加载也称为懒加载,延迟加 ...

  5. js实现网页图片延时加载的原理和代码 提高网站打开速度

    有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...

  6. HTML里的哪一部分Javascript 会在页面加载的时候被执行?

    最近遇到一个问题:HTML里的哪一部分Javascript 会在页面加载的时候被执行()A : 文件头部 B : 文件尾 C : <head>标签部分 D : <body>标签 ...

  7. Image Lazy Load:那些延时加载图片的开源插件(jQuery)

    图片延时加载技术对大流量的网站来说是十分实用的.目前图片在网站中大量使用,如果不加处理的话会对服务器和带宽造成级大压力,通过只渲染当前用户可见区域的图片,可以极大地减少网站的请求数,降低网络带宽资源. ...

  8. 图片延时加载原理 和 使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)

    图片加载技术分为:图片预加载和图片延时加载. javascript图片预加载和延时加载的区别主要体现在图片传输到客户端的时机上,都是为了提升用户体验的,延时加载又叫懒加载.两种技术的本质:两者的行为是 ...

  9. JAVA的单例模式与延时加载

    延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...

随机推荐

  1. C++实现从尾到头打印链表(不改变链表结构)

    /* * 从尾到头打印链表.cpp * * Created on: 2018年4月7日 * Author: soyo */ #include<iostream> #include<s ...

  2. ASP.NET验证控件CustomValidator客户端验证DropDownList、TextBox

    <asp:DropDownList ID="ddlTown" runat="server"> <asp:ListItem Value=&quo ...

  3. bzoj 1625: [Usaco2007 Dec]宝石手镯【背包】

    裸的01背包 #include<iostream> #include<cstdio> using namespace std; int c,n,w,v,f[20001]; in ...

  4. 文件cp功能

    #include<stdio.h> #include<unistd.h> #include<fcntl.h> #include<string.h> in ...

  5. HDU 6096 树套树

    思路: 网上的题解有AC自动机的,有trie树的,还有(乱搞?)的 首先把输入的那n个串按照字典序排序, 把n个串翻转以后再按照字典序排序 这样我们发现, 查的前缀在字典序排序后是一段区间, 查的后缀 ...

  6. Windows查杀端口

    Windows环境下当某个端口被占用时,通过netstat命令进行查询pid,然后通过taskkill命令杀进程. 一.查询占用端口号的进程信息 netstat -an|findstr 二.杀掉占用端 ...

  7. javascript:void(0)与#区别

    javascript:void(0)   鼠标点击时,不会跳转到其他页面,且停留在原地 #   鼠标点击时,不会跳转到其他页面,但会回到顶部

  8. CoreText的绘制流程-转

    来自:http://blog.sina.com.cn/s/blog_7c8dc2d50101lbb1.html 使用coreText进行文本绘制,需要在工程中添加CoreText.framework, ...

  9. 436 Find Right Interval 寻找右区间

    给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”.对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着 ...

  10. [Windows Server 2008] 404错误设置方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:如何设置4 ...