将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 };
时间: 2024-11-09 22:39:28

将css和js缓存到localStorage缓存,提高网页响应速度的相关文章

将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间

以下代码: //入口函数 if (window.localStorage) { initJs(); initCss("css", "/gfdzp201508257998/Turntable/Style/css_whir.css"); } else { addFile("/gfdzp201508257998/Turntable/Script/jquery-1.8.3.min.js", "js"); addFile("/

解决修改css或js文件,浏览器缓存更新问题。

在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css.js等,而不必从你的服务器读取,这样在一定程度上加快了网站的打开速度,又可以节约一下你的服务器流量. 问题 现在问题来了,.htaccess设置的css.js缓存都有一个过期时间,如果在访客的浏览器中已经缓存了css.js,在这些css.js缓存未过期之前,浏览器只会从缓存

Web移动端使用localStorage缓存Js和CSS文件

将js css文件缓存到localstorage区可以减少页面在加载时与HTTP请求的交互次数,从而优化页面的加载时间. 电脑端使用localstorage是测试没有问题的,但是用android的apk打包之后,导致localstorage失效,无法进行缓存,查阅资料之后,得知解决方法: 安卓代码: mWebView.getSettings().setDomStorageEnabled(true); mWebView.getSettings().setAppCacheMaxSize(1024*1

1-7 basket.js localstorage.js缓存css、js

basket.js 源码分析 api 使用文档: http://t3n.de/news/basketjs-performance-localstorage-515119/ 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此可以使我们防止不必要的重新请求 js 脚本,提升网站加载速度. 可以到 basket.js 的 Github 上查看更多的相关信息. 由于之前在工作中使用过

(转)CSS与JS中的相对路径引用简单介绍

javascript和css文件中采用相对路径,其基准路径是完全不同的. 1.javascript引用资源(比如图片)相对路径是以宿主路径(被引用的网页比如你在首页index.php引用了某js文件,则index.php即为宿主)所处位置为基准. 2.css引用资源(比如图片)相对路径是以.css文件所处位置为基准! 大家在html中通常会导入一些外部的css.js文件,而其中一个比较容易被忽视的问题就是路径问题,有时候,我们在css.js中都有通过路径来引入一张图片的需求,当我们采用相对路径的

HTMl、CSS、JS的区别:

HTMl.CSS.JS的区别: Html:决定网页的结构和内容----[结构] Css:控制页面的表现样式,如:美化页面----[表现] Js:控制网页的行为,如:给页面加动态的效果----[行为] 原文地址:https://www.cnblogs.com/reyinever/p/10776858.html

Gulp解决发布线上文件(CSS和JS)缓存问题

本文的缘由:目前经常线上发布文件后要不断的刷新页面及过很长时间,页面上的CSS和JS文件才能生效,特别对于目前做微信商城的时候,微信内置的浏览器缓存非常的严重,之前我们经常是在文件后面加上时间戳的方式来解决线上发布后的缓存问题,但是在微信浏览器内并不生效:因此我们需要改变文件名的方式来解决缓存的问题,因此使用后缀名加上MD5一连串的字符串来解决缓存的问题: 我们先可以考虑这么一个功能,我在页面上引用css文件如下: ./css/xx.css ./js/xx.js 我现在想通过使用MD5重新命名c

处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题

项目中需要使用app本地css.js,并且可以根据服务下发自动更新本地css.js.测试发现只要更新后的css或者js和更新前路径一致,webview加载的还是更新前的css.js.怀疑是webview本身缓存了css.js. 使用很多原生方法比如: [[NSURLCache sharedURLCache] removeAllCachedResponses];[[NSURLCache sharedURLCache] setDiskCapacity:0];[[NSURLCache sharedUR

web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

问题描述 最近将公司官网样式进行了调整,部署到服务器后访问发现页面展示不正常,但是刷新之后就会展示正常. 问题分析 研究之后发现可能的原因有 css文件过大,加载缓慢 本地缓存问题,虽然服务器修改了css文件,但是浏览器仍然使用本地缓存的css, 需要用户多刷新一次才能正常展示显然是很不合理的,那么怎么样解决更新后让浏览器请求新的css或js文件呢? 解决办法 方法1 更新文件后更改css/js文件名. 其实解决这个问题很简单,缓存是通过文件名标记缓存的内容的.在你更新了网站的css文件内容后,