预加载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代码的方法加快网页的访问速度
Oct 12 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
js实现无缝滚动特效
Dec 20 Javascript
jQuery中的Deferred和promise 的区别
Apr 03 Javascript
JQuery validate 验证一个单独的表单元素实例
Feb 17 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
Angular2的管道Pipe的使用方法
Nov 07 Javascript
vue axios整合使用全攻略
May 24 Javascript
原生JS实现前端本地文件上传
Sep 08 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
ionic使用angularjs表单验证(模板验证)
Dec 12 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
改变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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
php查看当前Session的ID实例
2015/03/16 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
使用python实现省市三级菜单效果
2016/01/20 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
python3将变量输入的简单实例
2020/08/19 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
安全教育实施方案
2014/03/02 职场文书
职务说明书范文
2014/05/07 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python