预加载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 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
javascript真的不难-回顾一下基础知识
Jan 15 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
js获取url中&quot;?&quot;后面的字串方法
May 15 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
3种vue路由传参的基本模式
Feb 22 Javascript
JS限制输入框输入的实现代码
Jul 02 Javascript
深入理解JavaScript的async/await
Aug 05 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
在antd Form表单中select设置初始值操作
Nov 02 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
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php分页示例分享
2014/04/30 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python类属性与实例属性用法分析
2015/05/09 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Django框架验证码用法实例分析
2019/05/10 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
python计算auc的方法
2020/09/09 Python
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
环保建议书300字
2014/05/14 职场文书
高效课堂教学反思
2016/02/24 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js