js中加载分两种:预加载与延迟加载

  一、  预加载,增强用户的体验,但会加载服务器的负担。一般会使用多种 CSS(background)、JS(Image)、HTML(<img />) 。

1、什么是预加载

提前加载图片,当用户需要查看时可直接从本地缓存中渲染

2、实现预加载的方法

a、单纯的css 实现

可通过CSS的background属性将图片预加载到屏幕外的背景上。只要这些图片的路径保持不变,当它们在Web页面的其他地方被调用时,浏览器就会在渲染过程中使用预加载(缓存)的图片。简单、高效,不需要任何JavaScript。

#preload-01 { background: url(http://domain.tld/image-01.png) no-repeat -9999px -9999px; } 

b、单纯的js预加载图片

<div class="hidden">
<script type="text/javascript">
<!--//--><![CDATA[//><!--
var images = new Array()
function preload() {
for (i = 0; i < preload.arguments.length; i++) {
images[i] = new Image()
images[i].src = preload.arguments[i]
}
}
preload(
"http://domain.tld/gallery/image-001.jpg",
"http://domain.tld/gallery/image-002.jpg",
"http://domain.tld/gallery/image-003.jpg"
)
//--><!]]>
</script>
</div>

c、使用ajax实现预加载

window.onload = function() {
setTimeout(function() {
// XHR to request a JS and a CSS
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain.tld/preload.js');
xhr.send('');
xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain.tld/preload.css');
xhr.send('');
// preload image
new Image().src = "http://domain.tld/preload.png";
}, 1000);
};

参考网址:http://web.jobbole.com/86785/

  二、延迟加载(懒加载)

1、什么是懒加载

懒加载又称延迟加载。

当访问一个页面时,先把img元素或者其他元素的背景图片替换成一张大小1*1px图片的路径(只需要请求一次的占位图),只有当图片出现在浏览器的可视区域内时,才设置图片真正的路径,让图片显示出来,这就是图片的懒加载。

2、懒加载的实现原理

页面中img元素,如果没有src属性,浏览器就不会发出请求去下载图片,只有通过js设置图片路径,浏览器才会发送请求;

懒加载的原理是先在页面中把所有的图片统一使用一张占位图进行占位,把真正的路径存在元素的‘data-url’属性中,要使用的时候,在设置。

3、懒加载的实现步骤

1)首先,不要将图片地址放到src属性中,而是放到其它属性(data-original)中。
              2)页面加载完成后,根据scrollTop判断图片是否在用户的视野内,如果在,则将data-original属性中的值取出存放到src属性中。
              3)在滚动事件中重复判断图片是否进入视野,如果进入,则将data-original属性中的值取出存放到src属性中。

4、懒加载的优点

页面加载速度快、可以减轻服务器的压力、节约了流量,用户体验好

   三、懒加载与预加载的对比

1、概念

懒加载也叫延迟加载:js图片延迟加载,延迟加载图片或者符合某些条件是才加载某些图片;

预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。(base64小图片可以通过css保存)

2、区别

两种技术的本质:两者的行为相反,一个是提前加载,一个是迟缓甚至不加载。懒加载会对前端有一定的缓解压力作用,预加载则会增加前端的压力。

3、懒加载的意义及实现方式:

懒加载的主要目的是优化前端性能,减少请求数或延迟请求数。

方法:

a、纯粹的延迟加载,使用setTimeOut或者setInterval 进行加载延迟;

b、条件加载,符合某些条件,或者触发了某些事件才开始异步下载;

c、可视区加载,即仅加载可以看到的区域,监控滚动条实现。

4、预加载的意义及实现方式

预加载是牺牲前端性能,换取用户体验,使用户的操作得到最快的反映。

方法:

比如:用CSS和JavaScript实现预加载;仅使用JavaScript实现预加载;使用Ajax实现预加载。

常用的是new Image();设置其src来实现预载,再使用onload()方法回调预加载完成事件。只要浏览器吧图片下载到本地,src就会使用缓存,这是最基本的预加载方法。当image下载完图片后,会得到宽和高,因此可以在预加载钱得到图片的大小(方法是用记时器轮循宽高变化)。

function loadImage(url,callback) {
var img = new Image(); img.src = url; if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img);
return; // 直接返回,不用再处理onload事件
} img.onload = function(){
img.onload = null;
callback.call(img);
}
}

     参考网址:https://blog.csdn.net/YiDaShi33/article/details/54316126

 四、vue中的懒加载

        vue中的延迟加载是通过webpack代码拆分组件实现的。

         在vue中,有3块不同的延迟加载和代码拆分,使用动态导入:

a、组件,又称为异步组件

b、路由器

c、vuex模块

1、 vue组件的延迟加载

通过将import函数包装到箭头函数中,Vue将仅在请求时执行它,并在该时刻加载模块。

Vue.component('AsyncCmp', () => import('./AsyncCmp'))

2、vue路由器中的延迟加载

vue路由器内置支持延迟加载。假设我们想在/login 路由中延迟加载一个Lgin 组件

// Instead of: import Login from './login'
const Login = () => import('./login') new VueRouter({
routes: [
{ path: '/login', component: Login }
]
})

3、延迟加载vuex模块

Vuex有一种registerModule方法可以让我们动态创建Vuex模块。

const store = new Vuex.Store()

...

// Assume there is a "login" module we wanna load
import('./store/login').then(loginModule => {
store.registerModule('login', loginModule)
})

参考网址:https://alexjoverm.github.io/2017/07/16/Lazy-load-in-Vue-using-Webpack-s-code-splitting/

js中的预加载与懒加载(延迟加载)的更多相关文章

  1. vue中页面卡顿,使用懒加载

    为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...

  2. webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)

    为什么要做dynamic import? dynamic import不知道为什么有很多叫法,什么按需加载,懒加载,Code Splitting,代码分页等.总之,就是在SPA,把JS代码分成N个页面 ...

  3. mybatis_12延时加载_懒加载

    延时加载:也叫懒加载 2.1 延迟加载 延迟加载又叫懒加载,也叫按需加载.也就是说先加载主信息,在需要的时候,再去加载从信息. 在mybatis中,resultMap标签 的association标签 ...

  4. js中的预编译

    预编译 js执行顺序: 词法/语法分析 预编译 解释执行 js中存在预编译 function demo() { console.log('I am demo'); } demo(); //I am d ...

  5. android viewpage预加载和懒加载问题

    1.本人理解懒加载和预加载问题某种情况下可以归结为一类问题,下面我就说一下我遇到的预加载问题和懒加载问题及解决的相应方法: - [1 ] 预加载问题        描述:我用到了三个fragment. ...

  6. JS使用onscroll、scrollTop实现图片懒加载

    今天做到项目中的图片展示,由于每一页的图片数量都很多,因此需要为图片的展示设计一种懒加载的功能. 第一要做的当然就是给程序添加滚动监听事件. //触发拉取图片开关,保证正在拉取时不能再次触发 var ...

  7. Spring提前加载与懒加载

    首先,Spring默认是提前加载,这意味着当项目启动,spring初始化,spring会把所有的扫描包下的 ,所有带spring 注解(@Component.@Repository.@Service. ...

  8. php之自动加载(懒加载)

    有A类和B类,如果在A类实例化B类,最简单直接的方法就是在B中使用include require_once A的文件,但是这种方法显然是不友好的,在框架中叶不是这么做的,在框架中使用的是自动加载的机制 ...

  9. vue-cli按需加载,懒加载组件

    vue来做一个单页面应用,当我们的项目越来越大,组件越来越多的时候,首次启动项目户特别慢,就算做一个加载框,蒙层之类的,体验也不会好,这个时候就需要按需加载 1.什么叫按需加载 所谓按需加载,顾名思义 ...

随机推荐

  1. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  2. iOS之UI--主流框架的搭建--仿制QQ的UI框架

    使用XCode搭建多个控制器界面,一般在实际开发中建议超过四个控制器界面使用纯代码. 下面的实例其实已经超过了四个,总结详细步骤的目的,主要是更熟悉XCode的StoryBoard使用细节. 先直接上 ...

  3. win7共享文件夹给局域网

    1.设置共享   2.关闭"需要密码访问"          

  4. android 进程/线程管理(三)----Thread,Looper / HandlerThread / IntentService

    Thread,Looper的组合是非常常见的组合方式. Looper可以是和线程绑定的,或者是main looper的一个引用. 下面看看具体app层的使用. 首先定义thread: package ...

  5. wordpress对显示某分类目录的文章列表页时对单个文章显示字数限制和省略

    wordpress会在对应的此类列表页面模板中,遍历输出每篇文章的信息,缩略图,作者,正文,标题等, 输出具体的正文的部分 使用这样一句 <?php the_content(''); ?> ...

  6. C# Ftp文件处理

    1.创建文件夹 /// <summary> /// ftp创建文件夹(只能创建单层目录) /// </summary> /// <param name="Uri ...

  7. window10系统安装oracle11g时遇到INS-13001环境不满足最低要求

    机器安装了window10系统,之前有次安装oracle11g是成功了.但是机器后来固态硬盘坏了,又坏了个后,还是win10系统安装oracle11g时,出现INS-13001环境不满足最低要求,郁闷 ...

  8. GridControl控件的数据显示的样式控制(转)

    如上两图所示,Dev列表控件GridControl默认的格式并没有渐变变色效果,显示的日期数据,也是“yyyy-MM-dd”的格式,而非“yyyy-MM-dd HH:mm:ss”即使对于后面有长格式的 ...

  9. 在Windows8下安装SQL Server 2005无法启动服务

    因为尝鲜安装了Windows8,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的办法了,和大家分享一下. 0.一定 ...

  10. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用

    作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...