预加载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 相关文章推荐
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
javascript轻量级模板引擎juicer使用指南
Jun 22 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
Apr 16 Javascript
javascript获取系统当前时间的方法
Nov 19 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
js实现数字滚动特效
Dec 16 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 Javascript
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
改变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 代码优化之经典示例
2011/03/24 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
PHP URL路由类实例
2013/11/12 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
微信公众号H5支付接口调用方法
2019/01/10 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
js实现缓动动画
2020/11/25 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python函数局部变量用法实例分析
2015/08/04 Python
Python subprocess模块详细解读
2018/01/29 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
新学期家长寄语
2014/01/19 职场文书
大学生毕业鉴定
2014/01/31 职场文书