移動端使用localStorage緩存Js和css文的方法(web開發(fā))
將jquery和公共樣式緩存到localStorage,可以減少Http請求,從而優(yōu)化頁面加載時間,下面的代碼可以實現(xiàn)此功能:
<script type="text/javascript">
//入口函數(shù)
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:動態(tài)添加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:動態(tài)添加js,css文件內(nèi)容
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>
查看寫入記錄:

封裝成JS插件:
/**
* 插件功能:使用localStorage緩存js和css文件,減少http請求和頁面渲染時間,適用于Web移動端H5頁面制作。
* 插件作者:zhangqs008@163.com
* 使用方法:
* 1.使用此插件前,需要給插件的pageVersion變量賦值,建議變量值由服務(wù)器后端輸出,當需要更新客戶端資源時,修改版本值即可。
* 2.加載Js:由于js加載有順序要求,所以需要將后加載的腳本作為前一個腳本的回調(diào)參數(shù)傳入,如:
* 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緩存
//動態(tài)加載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(); //回調(diào),執(zhí)行下一個引用
}
}
};
}
} else {
whir.res.writeJs(js);
if (callback != null) {
callback(); //回調(diào),執(zhí)行下一個引用
}
}
} 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);
}
}
調(diào)用該插件:
<script type="text/javascript">
//入口函數(shù)
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開發(fā)),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- JS 中LocalStorage和SessionStorage的使用
- JS中LocalStorage與SessionStorage五種循序漸進的使用方法
- JS localStorage實現(xiàn)本地緩存的方法
- 詳解JavaScript中l(wèi)ocalStorage使用要點
- JS實現(xiàn)本地存儲信息的方法(基于localStorage與userData)
- AngularJS之ionic 框架下實現(xiàn) Localstorage本地存儲
- JavaScript中l(wèi)ocalStorage對象存儲方式實例分析
- JavaScript使用localStorage存儲數(shù)據(jù)
- 使用JS獲取SessionStorage的值
- JS localStorage存儲對象,sessionStorage存儲數(shù)組對象操作示例
相關(guān)文章
JS數(shù)組進階示例【數(shù)組的幾種函數(shù)用法】
這篇文章主要介紹了JS數(shù)組進階,結(jié)合實例形式總結(jié)分析了數(shù)組的幾種常見函數(shù)基本用法,涉及JavaScript數(shù)組元素刪除、拼接、添加、倒序排列等相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
Save a File Using a File Save Dialog Box
Save a File Using a File Save Dialog Box...2007-06-06
基于ts的動態(tài)接口數(shù)據(jù)配置的詳解
這篇文章主要介紹了基于ts的動態(tài)接口數(shù)據(jù)配置的詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
javascript將16進制的字符串轉(zhuǎn)換為10進制整數(shù)hex
這篇文章主要介紹了javascript將16進制的字符串轉(zhuǎn)換為10進制整數(shù)hex,需要的朋友可以參考下2020-03-03
JavaScript isArray()函數(shù)判斷對象類型的種種方法
我們知道,JavaScript中檢測對象類型的運算符有:typeof、instanceof,還有對象的constructor屬性2010-10-10

