同步加载、异步加载、延迟加载

摘要:
默认情况下,同步加载、异步加载、延迟加载和同步加载通常是同步加载。通常,要加载的js会放在body end标记之前,这样js就可以在页面末尾加载,以最小化页面呈现的阻塞。延迟加载意味着这些未使用的js不会在开始时加载,而是在需要时或以后在js的控制下异步加载。也就是说,js被划分为许多模块。当页面初始化时,只加载需要立即执行的js,然后将其他js的加载延迟到第一次需要时。
同步加载、异步加载、延迟加载

一、同步加载
  平常默认用的都是同步加载。如:<script src="http://t.zoukankan.com/http://yourdomain.com/script.js"></script> 
  同步模式又称阻塞模式,会阻止浏览器的后续处理,停止了后续的文件的解析,执行,如图像的渲染。流览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作,重定向,输出document等默认行为,所以同步才是最安全的。通常会把要加载的js放到body结束标签之前,使得js可在页面最后加载,尽量减少阻塞页面的渲染。这样可以先让页面显示出来

二、异步加载

(function() { 
var s = document.createElement('script'); 
s.type = 'text/javascript'; 
s.async = true; 
s.src = 'http://t.zoukankan.com/http://yourdomain.com/script.js'
var x = document.getElementsByTagName('script')[0]; 
 x.parentNode.insertBefore(s, x); 
})();

异步加载也叫非阻塞模式加载,浏览器在下载js的同时,同时还会执行后续的页面处理。
在script标签内,用js创建一个script元素并插入到document中,这种就是异步加载js文件了。

同步加载流程是瀑布模型,异步加载流程是并发模型。

三、延迟加载(lazy loading)

前面解决了异步加载(async loading)问题,再谈谈什么是延迟加载。
延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。延迟加载就是一开始并不加载这些暂时不用的js,而是在需要的时候或稍后再通过js 的控制来异步加载。
也就是将 js 切分成许多模块,页面初始化时只加载需要立即执行的 js ,然后其它 js 的加载延迟到第一次需要用到的时候再加载。
特别是页面有大量不同的模块组成,很多可能暂时不用或根本就没用到。
就像图片的延迟加载,在图片出现在可视区域内时(在滚动条下拉)才加载显示图片

四、预加载

预加载是一种浏览器机制,使用浏览器空闲时间来预先下载/加载用户接下来很可能会浏览的页面/资源,当用户访问某个预加载的链接时,如果从缓存命中,页面就得以快速呈现。




免责声明:文章转载自《同步加载、异步加载、延迟加载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇动态代理(二)—— CGLIB代理原理LXD 2.0 系列(五):镜像管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cetos7 systemd 详解

  CentOS7/RHEL7 systemd详解 目录1. 为什么是systemd(1) 关于Linux服务管理(2) SysV init的优缺点(3) UpStart的改进(4) systemd的诞生(5)为什么systemd能做到启动很快2. SysV init介绍(1) 什么是SystemV(2)SysV init的运行级别(3)SysV in...

MOGRE学习笔记(1)

       由于工作需要,花费了一段时间研究OGRE,但是研究的目的是要在vs2010平台下用c#进行MOGRE的开发,不得已才转到MGRE,步骤是首选熟悉MOGRE的一些基础知识,做到在winform下能用MOGRE单独开发项目,最终的目的不仅限于此,而是构建一个MOGRE和physx结合的一个开发平台,以便在此基础上能够运用vs和.net快速的开发项...

JS几个常用的工具函数

  项目中JS也不可避免会出现重用,所以可以像Java一样抽成工具类,下面总结了几个常用的函数: 1.日期处理函数   将日期返回按指定格式处理过的字符串: function Format(now,mask) { var d = now; var zeroize = function (value, lengt...

Bootstrap3入门

Bootstrap3学习第一轮(入门)前言 在上一节中http://www.cnblogs.com/aehyok/p/3381651.html主要是简单的介绍了一下Bootstrap。从http://www.bootcss.com/中文网不难发现现在是针对两个版本进行文档说明,看来两个版本的差别还是蛮大的。 不过从Visual Studio 2013前不...

【转】linux 定时执行shell脚本

在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 利用crontab来定时执行任...

JS动态创建表格比较【转】

目标:生成一个2000*5的表格,每个单元格的内容是行号+逗号+列号 方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,单元格的内容使用innerHTML属性进行填充。 方法二:使用createElement生成表格,使用CreateElement方法生成行列,单元格的内容使用了createTex...