预加载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系列(6):S.O.L.I.D五大原则之单一职责SRP
Jan 15 Javascript
JavaScript中valueOf函数与toString方法深入理解
Dec 02 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
EasyUI布局 高度自适应
Jun 04 Javascript
js实现上传并压缩图片效果
Jan 10 Javascript
koa socket即时通讯的示例代码
Sep 07 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
Sep 06 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
ajax异步请求详解
2017/01/06 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python 字典(dict)按键和值排序
2016/06/28 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
python实现低通滤波器代码
2020/02/26 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
领导证婚人证婚词
2014/01/13 职场文书
销售员岗位职责范本
2014/02/03 职场文书
医院标语大全
2014/06/23 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
小学重阳节活动总结
2015/03/24 职场文书
金榜题名主持词
2015/07/02 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP