预加载css或javascript的js代码


Posted in Javascript onApril 23, 2010

预加载文件一般有两种常用的方式: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...

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

Javascript 相关文章推荐
javascript开发技术大全 第4章 直接量与字符集
Jul 03 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
Jun 15 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
javascript实现的网站访问量统计代码
Dec 20 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
javascript+html5+css3自定义提示窗口
Jun 21 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 Javascript
小程序新版订阅消息模板消息
Dec 31 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 #Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 #Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
Apr 23 #Javascript
js 文件引入实现代码
Apr 23 #Javascript
网页图片延时加载的js代码
Apr 22 #Javascript
基于jQuery的表格操作插件
Apr 22 #Javascript
JQuery实现的在新窗口打开链接的方法小结
Apr 22 #Javascript
You might like
PHP 实现页面静态化的几种方法
2017/07/23 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python获取服务器响应cookie的实例
2018/12/28 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python实现智能语音天气预报
2019/12/02 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
Python错误的处理方法
2020/06/23 Python
如何用python写个模板引擎
2021/01/14 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
房产销售经理职责
2013/12/20 职场文书
英文导游欢迎词
2014/01/11 职场文书
关于逃课的检讨书
2014/01/23 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
贷款担保书范文
2014/05/13 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
学习考察心得体会
2014/09/04 职场文书
紫日观后感
2015/06/05 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB