国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

預加載css或javascript的js代碼

2019-11-21 00:33:19
字體:
來源:轉載
供稿:網友
預加載文件一般有兩種常用的方式:xhr和動態插入節點的方式。動態插入節點是最為簡單也最為廣泛的一種異步加載方式(例如yui的Get模塊),然后使用動態插入節點方法加載的文件都會在加載后立即執行,javascript的執行一方面會占用瀏覽器js執行進程,另一方面也可能改變頁面結構,而css的執行更有可能讓整個頁面變化。xhr方式雖然不會執行腳本,但是由于同域的限制,且如今網站的靜態文件都是部署在cdn服務器上,如何預加載css js文件也變有點玄妙了。

Stoyan Stefanov 撰文簡明的闡述了一種加載文件而不會讓之執行的方法。原文可見 http://www.phpied.com/preload-cssjavascript-without-execution/

具體的方法是,ie中使用 new Image().src 去預加載文件,而其他瀏覽器使用動態插入的 <object> 標簽來完成加載。
部分代碼如下

復制代碼 代碼如下:

window.onload = function () {

var i = 0,
max = 0,
o = null,

// list of stuff to preload
preload = [
'http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.png',
'http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.js',
'http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.css'
],
isIE = navigator.appName.indexOf('Microsoft') === 0;

for (i = 0, max = preload.length; i < max; i += 1) {

if (isIE) {
new Image().src = preload[i];
continue;
}
o = document.createElement('object');
o.data = preload[i];

// IE stuff, otherwise 0x0 is OK
//o.width = 1;
//o.height = 1;
//o.style.visibility = "hidden";
//o.type = "text/plain"; // IE
o.width = 0;
o.height = 0;

// only FF appends to the head
// all others require body
document.body.appendChild(o);
}
};

demo 可見 http://phpied.com/files/object-prefetch/page1.php?id=1

幾點說明:
1. new Image().src 之所以不能在ff中使用是因為ff對圖片實現了一套單獨的緩存。 同時safari和chrome看起來也沒有被緩存。

2. 動態插入的 object 標簽需要插入到非 head部分,以觸發加載。

3. ie7 ie8 也可以通過一些代碼使用動態object加載文件(代碼注釋中有提到)。但是作者發現object 通常會消耗很大, so...


通過自身的實驗發現相當不錯的,有需求的同學不妨一試。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 确山县| 吴川市| 剑河县| 河间市| 徐汇区| 广州市| 富宁县| 木里| 仪陇县| 寿光市| 桑植县| 弥渡县| 永胜县| 清远市| 淮滨县| 桐乡市| 娄烦县| 西吉县| 中方县| 曲沃县| 怀化市| 司法| 北安市| 治多县| 敖汉旗| 建湖县| 威远县| 丰宁| 孟州市| 个旧市| 巫溪县| 绥宁县| 稷山县| 辽阳县| 大埔区| 江阴市| 根河市| 大悟县| 潼南县| 伊金霍洛旗| 旬阳县|