懒加载和预加载的实现

提到前端性能优化中图片资源的优化,懒加载和预加载就不能不说,下面我用最简洁明了的语言,说明懒加载和预加载的核心要点以及实现。html

1.懒加载

懒加载的要点以下:前端

1.图片进入可视区域以后请求图片资源;跨域

2.对于电商等图片较多,页面很长的业务场景很适用;缓存

3.能够减小无效资源的加载;性能优化

4.并发加载的资源过多会阻塞js的加载,影响网站的正常使用;并发

如何实现懒加载呢?要点就是html中img标签src属性为空,给一个data属性,里面存放图片真实地址,在须要的时候,动态的将这个地址赋予图片src属性。前端性能

以下所示:性能

<img src="" class="image-item" lazyload="true" data-original="http://pic26.nipic.com/20121213/6168183_004444903000_2.jpg" />

相似上述代码所示,当须要时间,用js脚本控制图片的加载:优化

复制代码
var viewHeight = document.documentElement.clientHeight // 可视区域的高度

function lazyload () {
  // 获取全部要进行懒加载的图片
  var eles = document.querySelectorAll('img[data-original][lazyload]')
  Array.prototype.forEach.call(eles, function (item, index) {
    var rect
    if (item.dataset.original === '')
      return
    rect = item.getBoundingClientRect()
    // 图片一进入可视区,动态加载
    if (rect.bottom >= 0 && rect.top < viewHeight) {
      !function () {
        var img = new Image()
        img.src = item.dataset.original
        img.onload = function () {
          item.src = img.src
        }
        item.removeAttribute('data-original')
        item.removeAttribute('lazyload')
      }()
    }
  })
}
// 首屏要人为的调用,不然刚进入页面不显示图片
lazyload()

document.addEventListener('scroll', lazyload)
复制代码

2.预加载

预加载的核心要点以下:网站

1.图片等静态资源在使用以前的提早请求;

2.资源后续使用时能够从缓存中加载,提高用户体验;

3.页面展现的依赖关系维护(必需的资源加载完才能够展现页面,防止白屏等);

实现预加载主要有三个方法:

1.html中img标签最初设置为display:none;

2.js脚本中使用image对象动态建立好图片;

3.使用XMLHttpRequest对象能够更加精细的控制预加载过程,缺点是没法跨域:

var xmlhttprequest = new XMLHttpRequest(); 
xmlhttprequest.open("GET",src,true);
相关文章
相关标签/搜索