预加载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 中的类和闭包
Jan 08 Javascript
JQuery从头学起第二讲
Jul 04 Javascript
在JavaScript的正则表达式中使用exec()方法
Jun 16 Javascript
JS拖拽插件实现步骤
Aug 03 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 Javascript
js实现一个猜数字游戏
Mar 31 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
Jun 28 Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 Javascript
js实现双人五子棋小游戏
May 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
中国的第一台收音机
2021/03/01 无线电
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
js arguments对象应用介绍
2012/11/28 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
express express-session的使用小结
2018/12/12 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
js实现星星打分效果
2020/07/05 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python程序运行原理图文解析
2018/02/10 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
python 调用Google翻译接口的方法
2020/12/09 Python
全球最大的游戏市场:G2A
2018/07/05 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
设计师个人求职信范文
2014/02/02 职场文书
搞笑爱情保证书
2014/04/29 职场文书
电视节目策划方案
2014/05/16 职场文书
六年级学生期末评语
2014/12/26 职场文书
孔子观后感
2015/06/08 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
Flink 侧流输出源码示例解析
2022/09/23 Servers