实现图片加载速度优化的办法

2,825 阅读1分钟

实现图片加载速度优化的办法

一. 使用base64加载
  • 在网页中将图片转成base64编码
  • 在html的img标签中使用
    <img src="data:image/png;base64,******"/>
  • 在html的div标签中使用
    <div style="background-image:url("data:image/png;base64,******")"></div
二. 图片预加载
<body>
<img src="" alt=""  id="pic"/>
 //存放图片路径的地址
   <script>
         var arr = [
          '../picture/1.jpg',
          '../picture/2.jpg',
          '../picture/3.jpg',
      ];

      var imgs =[]
      preLoadImg(arr);

      //图片预加载方法
      function preLoadImg(pars){
          for(let i=0;i<arr.length;i++){
              imgs[i] = new Image();
              imgs[i].src = arr[i];
          }
      }
       // 5s之后显示出该图片
      setInterval(function(){
          var pic = document.querySelector('#pic');
          pic.src = '../picture/1.jpg'
      },5000);

   </script>
三. 使用Ajax实现预加载
使用Ajax实现图片预加载的方法。该方法利用DOM,不仅仅预加载图片,还会预加载CSS、JavaScript等相关的东西。使用Ajax,比直接使用JavaScript,优越之处在于JavaScript和CSS的加载不会影响到当前页面。该方法简洁、高效。
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);
};
上面代码预加载了“preload.JS”、“preload.css”和“preload.png”。1000毫秒的超时是为了防止脚本挂起,而导致正常页面出现功能问题。

下面,我们看看如何用JavaScript来实现该加载过程:
window.onload = function() {
 
    setTimeout(function() {
 
        // reference to <head>
        var head = document.getElementsByTagName('head')[0];
 
        // a new CSS
        var css = document.createElement('link');
        css.type = "text/css";
        css.rel  = "stylesheet";
        css.href = "http://domain.tld/preload.css";
 
        // a new JS
        var js  = document.createElement("script");
        js.type = "text/javascript";
        js.src  = "http://domain.tld/preload.js";
 
        // preload JS and CSS
        head.appendChild(css);
        head.appendChild(js);
 
        // preload image
        new Image().src = "http://domain.tld/preload.png";
 
    }, 1000);
 
};