将css和js缓存到localStorage缓存,提高网页响应速度

适用于小站点,这很极致,很快速~~

  1 /**
  2  * Created by SevenNight on 2016/9/21 0021.
  3  * 插件功能:使用localStorage缓存js和css文件,减少http请求和页面渲染时间
  4  * 使用方法:
  5  *    1.使用此插件前,需要给插件的pageVersion变量赋值,建议变量值由服务器后端输出,当需要更新客户端资源时,修改版本值即可。
  6  *    2.加载Js:由于js加载有顺序要求,所以需要将后加载的脚本作为前一个脚本的回调参数传入,如:
  7  *    whir.res.loadJs("jquery", "//cdn.bootcss.com/jquery/1.12.4/jquery.min.js",
  8  *        function () {
  9  *            whir.res.loadJs("turntable", "Script/whir.turntable.js", null);
 10  *        }
 11  *    );
 12  *    3.加载css,如:whir.res.loadCss("css", "/Style/css_whir.css", null);
 13  */
 14 var whir = window.whir || {};
 15 function getRelativePath(url,level){
 16     var urlarray = url.split("/");
 17     var resulturl = "";
 18     for(var i=0;i<urlarray.length-level;i++){
 19         resulturl += urlarray[i]+"/";
 20     }
 21     return resulturl;
 22 }
 23 whir.res = {
 24     pageVersion: "0.0.1", //页面版本,也由页面输出,用于刷新localStorage缓存
 25     //动态加载js文件并缓存
 26     loadJs: function (name, url, callback) {
 27         if (window.localStorage) {
 28             var xhr;
 29             var js = localStorage.getItem(name);
 30             if (js == null || js.length == 0 || this.pageVersion != localStorage.getItem("version")) {
 31                 if (window.ActiveXObject) {
 32                     xhr = new ActiveXObject("Microsoft.XMLHTTP");
 33                 } else if (window.XMLHttpRequest) {
 34                     xhr = new XMLHttpRequest();
 35                 }
 36                 if (xhr != null) {
 37                     xhr.open("GET", url);
 38                     xhr.send(null);
 39                     xhr.onreadystatechange = function () {
 40                         if (xhr.readyState == 4 && xhr.status == 200) {
 41                             js = xhr.responseText;
 42                             localStorage.setItem(name, js);
 43                             localStorage.setItem("version", whir.res.pageVersion);
 44                             js = js == null ? "" : js;
 45                             whir.res.writeJs(js);
 46                             if (callback != null) {
 47                                 callback(); //回调,执行下一个引用
 48                             }
 49                         }
 50                     };
 51                 }
 52             } else {
 53                 whir.res.writeJs(js);
 54                 if (callback != null) {
 55                     callback(); //回调,执行下一个引用
 56                 }
 57             }
 58         } else {
 59             whir.res.linkJs(url);
 60         }
 61     },
 62     loadCss: function (name, url) {
 63         if (window.localStorage) {
 64             var xhr;
 65             var css = localStorage.getItem(name);
 66             if (css == null || css.length == 0 || this.pageVersion != localStorage.getItem("version")) {
 67                 if (window.ActiveXObject) {
 68                     xhr = new ActiveXObject("Microsoft.XMLHTTP");
 69                 } else if (window.XMLHttpRequest) {
 70                     xhr = new XMLHttpRequest();
 71                 }
 72                 if (xhr != null) {
 73                     xhr.open("GET", url);
 74                     xhr.send(null);
 75                     xhr.onreadystatechange = function () {
 76                         if (xhr.readyState == 4 && xhr.status == 200) {
 77                             css = xhr.responseText;
 78                             localStorage.setItem(name, css);
 79                             localStorage.setItem("version", whir.res.pageVersion);
 80                             css = css == null ? "" : css;
 81                             css = css.replace(/\..\/fonts\//g, getRelativePath(url,2)+"fonts/"); //css里的font路径需单独处理
 82                             whir.res.writeCss(css);
 83                         }
 84                     };
 85                 }
 86             } else {
 87                 css = css.replace(/\..\/fonts\//g, getRelativePath(url,2)+"fonts/"); //css里的font路径需单独处理
 88                 whir.res.writeCss(css);
 89             }
 90         } else {
 91             whir.res.linkCss(url);
 92         }
 93     },
 94     //往页面写入js脚本
 95     writeJs: function (text) {
 96         var head = document.getElementsByTagName('HEAD').item(0);
 97         var link = document.createElement("script");
 98         link.type = "text/javascript";
 99         link.innerHTML = text;
100         head.appendChild(link);
101     },
102     //往页面写入css样式
103     writeCss: function (text) {
104         var head = document.getElementsByTagName('HEAD').item(0);
105         var link = document.createElement("style");
106         link.type = "text/css";
107         link.innerHTML = text;
108         head.appendChild(link);
109     },
110     //往页面引入js脚本
111     linkJs: function (url) {
112         var head = document.getElementsByTagName('HEAD').item(0);
113         var link = document.createElement("script");
114         link.type = "text/javascript";
115         link.src = url;
116         head.appendChild(link);
117     },
118     //往页面引入css样式
119     linkCss: function (url) {
120         var head = document.getElementsByTagName('HEAD').item(0);
121         var link = document.createElement("link");
122         link.type = "text/css";
123         link.rel = "stylesheet";
124         link.rev = "stylesheet";
125         link.media = "screen";
126         link.href = url;
127         head.appendChild(link);
128     }
129 };

 

posted @ 2016-10-09 10:28  sevennight  阅读(2346)  评论(1编辑  收藏  举报