预加载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 相关文章推荐
js 判断 enter 事件
Feb 12 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
jQuery判断自定义属性data-val用法示例
Jan 07 jQuery
12个提高JavaScript技能的概念(小结)
May 09 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 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实现获取文章内容第一张图片的方法
2014/11/04 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
主办会计岗位职责
2014/03/13 职场文书
投标担保书范文
2014/04/02 职场文书
环保倡议书怎么写
2014/05/16 职场文书
运动会主持词大全
2015/07/02 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL