预加载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中删除指定数组中指定的元素的代码
Feb 12 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
jQuery实现轮播图及其原理详解
Apr 12 jQuery
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
vue路由守卫,限制前端页面访问权限的例子
Nov 11 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 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 手机归属地查询 api
2010/02/08 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
php微信开发之图片回复功能
2018/06/14 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
简单实现python进度条脚本
2017/12/18 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
基于python指定包的安装路径方法
2018/10/27 Python
python批量处理文件或文件夹
2020/07/28 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
如何表示python中的相对路径
2020/07/08 Python
python 5个实用的技巧
2020/09/27 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
公司总经理岗位职责范本
2014/08/15 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
2014年班组长工作总结
2014/11/20 职场文书
在职证明书模板
2015/06/15 职场文书
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers