zoukankan      html  css  js  c++  java
  • 将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 };
  • 相关阅读:
    堆(heap)和栈(stack)的区别
    STL容器学习总结
    从瀑布模型、极限编程到敏捷开发
    智力题
    Trie树详解及其应用
    理解inode
    找出字符串中连续出现次数最多的子串
    Oracle数据库中大数据量查询优化问题分区表的操作方法
    “在解决方案中的一个或多个项目由于以下原因未能加载 项目文件或网站已移动或重新命名,或者不在您的计算机上” 的解决办法
    转:完全卸载Oracle方法
  • 原文地址:https://www.cnblogs.com/cnsevennight/p/5941195.html
Copyright © 2011-2022 走看看