css,javascript的预加载

为了提高网站的加载速度,有一个很重要的手段就是在用户浏览过程中的上游网站做一个文件的预加载。预加载文件一般有两种常用的方式: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> 标签来完成加载。

 

部分代码如下

 

ExpandedBlockStart.gif code
 1  window.onload  =   function  () {
 2 
 3       var  i  =   0 ,
 4          max  =   0 ,
 5          o  =   null ,
 6 
 7           //  list of stuff to preload
 8          preload  =  [
 9               ' http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.png ' ,
10               ' http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.js ' ,
11               ' http://tools.w3clubs.com/pagr2/<?php echo $id; ?>.sleep.expires.css '
12          ],
13          isIE  =  navigator.appName.indexOf( ' Microsoft ' ===   0 ;
14 
15       for  (i  =   0 , max  =  preload.length; i  <  max; i  +=   1 ) {
16 
17           if  (isIE) {
18               new  Image().src  =  preload[i];
19               continue ;
20          }
21          o  =  document.createElement( ' object ' );
22          o.data  =  preload[i];
23 
24           //  IE stuff, otherwise 0x0 is OK
25           // o.width = 1;
26           // o.height = 1;
27           // o.style.visibility = "hidden";
28           // o.type = "text/plain"; // IE 
29          o.width   =   0 ;
30          o.height  =   0 ;
31 
32           //  only FF appends to the head
33           //  all others require body
34          document.body.appendChild(o);
35      }
36 
37  };
38 


 

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...

 

 

通过自身的实验发现相当不错的,有需求的同学不妨一试。

 

 

转载于:https://www.cnblogs.com/demix/archive/2010/04/22/1718040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值