移动端使用localStorage缓存Js和css文的方法(web开发)


Posted in Javascript onSeptember 20, 2016

将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间,下面的代码可以实现此功能:

<script type="text/javascript"> 
//入口函数 
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("/gfdzp201508257998/Turntable/Script/whir.turntable.js", "js"); 
addFile("/gfdzp201508257998/Turntable/Style/css_whir.css", "css"); 
} 
//第一步:加载页面js:先加载jQuery后加载用户脚本 
function initJs() { 
var name = "jquery"; 
var url = "/gfdzp201508257998/Turntable/Script/jquery-1.8.3.min.js"; 
var xhr; 
var js = window.localStorage ? localStorage.getItem(name) : ""; 
if (js == null || js.length == 0) { 
if (window.ActiveXObject) { 
xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} else if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
xhr.open("GET", url); 
xhr.send(null); 
xhr.onreadystatechange = function () { 
if (xhr.readyState == 4 && xhr.status == 200) { 
js = xhr.responseText; 
localStorage.setItem(name, js); 
js = js == null ? "" : js; 
addTxt(js, "js"); 
initTurntable(); //确保先引用Jquery 
} 
}; 
} else { 
addTxt(js, "js"); 
initTurntable(); 
} 
} 
//加载自定义脚本 
function initTurntable() { 
var name = "turntable"; 
var url = "/gfdzp201508257998/Turntable/Script/whir.turntable.js"; 
var xhr; 
var js = window.localStorage ? localStorage.getItem(name) : ""; 
if (js == null || js.length == 0) { 
if (window.ActiveXObject) { 
xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} else if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
xhr.open("GET", url); 
xhr.send(null); 
xhr.onreadystatechange = function () { 
if (xhr.readyState == 4 && xhr.status == 200) { 
js = xhr.responseText; 
localStorage.setItem(name, js); 
js = js == null ? "" : js; 
addTxt(js, "js"); 
} 
}; 
} else { 
addTxt(js, "js"); 
} 
} 
//第二步:初始化Css 
function initCss(name, url) { 
var xhr; 
var css = window.localStorage ? localStorage.getItem(name) : ""; 
if (css == null || css.length == 0) { 
if (window.ActiveXObject) { 
xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} else if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
xhr.open("GET", url); 
xhr.send(null); 
xhr.onreadystatechange = function () { 
if (xhr.readyState == 4 && xhr.status == 200) { 
css = xhr.responseText; 
localStorage.setItem(name, css); 
css = css == null ? "" : css; 
css = css.replace(/images\//g, "style/images/"); 
addTxt(css, "css"); 
} 
}; 
} else { 
css = css.replace(/images\//g, "style/images/"); 
addTxt(css, "css"); 
} 
} 
//辅助方法1:动态添加js,css文件引用 
function addFile(url, fileType) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link; 
if (fileType == "js") { 
link = document.createElement("script"); 
link.type = "text/javascript"; 
link.src = url; 
} else { 
link = document.createElement("link"); 
link.type = "text/css"; 
link.rel = "stylesheet"; 
link.rev = "stylesheet"; 
link.media = "screen"; 
link.href = url; 
} 
head.appendChild(link); 
} 
//辅助方法2:动态添加js,css文件内容 
function addTxt(text, fileType) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link; 
if (fileType == "js") { 
link = document.createElement("script"); 
link.type = "text/javascript"; 
link.innerHTML = text; 
} else { 
link = document.createElement("style"); 
link.type = "text/css"; 
link.innerHTML = text; 
} 
head.appendChild(link); 
} 
</script>

查看写入记录:

移动端使用localStorage缓存Js和css文的方法(web开发)

封装成JS插件:

/** 
* 插件功能:使用localStorage缓存js和css文件,减少http请求和页面渲染时间,适用于Web移动端H5页面制作。 
* 插件作者:zhangqs008@163.com 
* 使用方法: 
* 1.使用此插件前,需要给插件的pageVersion变量赋值,建议变量值由服务器后端输出,当需要更新客户端资源时,修改版本值即可。 
* 2.加载Js:由于js加载有顺序要求,所以需要将后加载的脚本作为前一个脚本的回调参数传入,如: 
* whir.res.loadJs("jquery", "<%= BasePath %>Turntable/Script/jquery-1.8.3.min.js", 
* function () { 
* whir.res.loadJs("turntable", "Script/whir.turntable.js", null); 
* }); 
* 3.加载css,如:whir.res.loadCss("css", "/Style/css_whir.css", null); 
*/ 
var whir = window.whir || {}; 
whir.res = { 
pageVersion: "", //页面版本,由页面输出,用于刷新localStorage缓存 
//动态加载js文件并缓存 
loadJs: function (name, url, callback) { 
if (window.localStorage) { 
var xhr; 
var js = localStorage.getItem(name); 
if (js == null || js.length == 0 || this.pageVersion != localStorage.getItem("version")) { 
if (window.ActiveXObject) { 
xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} else if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
if (xhr != null) { 
xhr.open("GET", url); 
xhr.send(null); 
xhr.onreadystatechange = function () { 
if (xhr.readyState == 4 && xhr.status == 200) { 
js = xhr.responseText; 
localStorage.setItem(name, js); 
localStorage.setItem("version", whir.res.pageVersion); 
js = js == null ? "" : js; 
whir.res.writeJs(js); 
if (callback != null) { 
callback(); //回调,执行下一个引用 
} 
} 
}; 
} 
} else { 
whir.res.writeJs(js); 
if (callback != null) { 
callback(); //回调,执行下一个引用 
} 
} 
} else { 
whir.res.linkJs(url); 
} 
}, 
loadCss: function (name, url) { 
if (window.localStorage) { 
var xhr; 
var css = localStorage.getItem(name); 
if (css == null || css.length == 0 || this.pageVersion != localStorage.getItem("version")) { 
if (window.ActiveXObject) { 
xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} else if (window.XMLHttpRequest) { 
xhr = new XMLHttpRequest(); 
} 
if (xhr != null) { 
xhr.open("GET", url); 
xhr.send(null); 
xhr.onreadystatechange = function () { 
if (xhr.readyState == 4 && xhr.status == 200) { 
css = xhr.responseText; 
localStorage.setItem(name, css); 
localStorage.setItem("version", whir.res.pageVersion); 
css = css == null ? "" : css; 
css = css.replace(/images\//g, "style/images/"); //css里的图片路径需单独处理 
whir.res.writeCss(css); 
} 
}; 
} 
} else { 
css = css.replace(/images\//g, "style/images/"); //css里的图片路径需单独处理 
whir.res.writeCss(css); 
} 
} else { 
whir.res.linkCss(url); 
} 
}, 
//往页面写入js脚本 
writeJs: function (text) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link = document.createElement("script"); 
link.type = "text/javascript"; 
link.innerHTML = text; 
head.appendChild(link); 
}, 
//往页面写入css样式 
writeCss: function (text) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link = document.createElement("style"); 
link.type = "text/css"; 
link.innerHTML = text; 
head.appendChild(link); 
}, 
//往页面引入js脚本 
linkJs: function (url) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link = document.createElement("script"); 
link.type = "text/javascript"; 
link.src = url; 
head.appendChild(link); 
}, 
//往页面引入css样式 
linkCss: function (url) { 
var head = document.getElementsByTagName('HEAD').item(0); 
var link = document.createElement("link"); 
link.type = "text/css"; 
link.rel = "stylesheet"; 
link.rev = "stylesheet"; 
link.media = "screen"; 
link.href = url; 
head.appendChild(link); 
} 
}

调用该插件:

<script type="text/javascript"> 
//入口函数 
whir.res.pageVersion = "1002"; //页面版本,用于检测是否需要更新缓存 
whir.res.loadJs("jquery", "/gfdzp201508257998/Turntable/Script/jquery-1.8.3.min.js", 
function () { 
whir.res.loadJs("turntable", "/gfdzp201508257998/Turntable/Script/whir.turntable.js", null); 
}); 
whir.res.loadCss("css", "/gfdzp201508257998/Turntable/Style/css_whir.css", null); 
</script>

以上所述是小编给大家介绍的移动端使用localStorage缓存Js和css文的方法(web开发),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript判断单选框或复选框是否选中方法集锦
Apr 04 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
Jul 12 Javascript
验证手机号码的JS方法分享
Sep 10 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
H5移动端适配 Flexible方案
Oct 24 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
Jun 04 jQuery
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
关于Javascript中defer和async的区别总结
Sep 20 #Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 #Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 #Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 #Javascript
javascript cookie基础应用之记录用户名的方法
Sep 20 #Javascript
深入理解requestAnimationFrame的动画循环
Sep 20 #Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 #Javascript
You might like
PHP函数学习之PHP函数点评
2012/07/05 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
表单提交验证类
2006/07/14 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
python算法学习之计数排序实例
2013/12/18 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
敬老模范事迹
2014/05/21 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
青春雷锋观后感
2015/06/10 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Python利器openpyxl之操作excel表格
2021/04/17 Python
基于Go Int转string几种方式性能测试
2021/04/28 Golang
新手入门Mysql--概念
2021/06/18 MySQL