预加载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 相关文章推荐
bcastr2.0 通用的图片浏览器
Nov 22 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
微信小程序图片自适应实现解析
Jan 21 Javascript
vue select 获取value和lable操作
Aug 28 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开发工具
2015/11/09 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
python使用turtle库绘制时钟
2020/03/25 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python中的逆序遍历实例
2019/12/25 Python
python实现滑雪游戏
2020/02/22 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
SQL面试题
2013/04/30 面试题
员工自我鉴定
2013/10/09 职场文书
五好关工委申报材料
2014/05/31 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
党员评议思想汇报
2014/10/08 职场文书
医院营销工作计划
2015/01/16 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书