预加载javascript和CSS文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了预加载javascript和CSS文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2215字,纯文字阅读大概需要4分钟。
内容图文
![预加载javascript和CSS文件](/upload/InfoBanner/zyjiaocheng/654/b727be70b2004ed39ef88bcdc2c062d7.jpg)
我目前正在开发一个移动网站,其中包含大量图片,css和javascript(例如,使用150KB未压缩的库).我为图像构造了一个预加载器,效果很好:
function loadImages(images){
var sum = 0;
for(i in images){
sum += images[i][1]; // file size
}
setMaxProgress(sum);
for(i in imageArray){
var img = new Image();
img.onload = function(){ addProgress(imageArray[i][1]); };
img.src = imageArray[i][0];
}
}
但是,我现在想对javascript和css做类似的事情,但是可用的资源却少得多.我发现的唯一方法是在文档加载后对html标签进行document.write(),但这并不能使我(可靠地)指示何时加载文件.
在我仍然可以衡量进度的同时,有没有办法做到这一点?
顺便说一句:我将它用作常规优化技术的补充,例如最小化js / css,gzipping,css sprite和适当的缓存控制,而不是替代.用户可以跳过加载,然后网站可以正常运行,尽管运行不太顺利
解决方法:
如果您需要知道何时加载JS,请使用以下loadScript函数.您也许可以对CSS进行类似的操作,但是我还没有尝试过:
function preload(src, callback, node)
{
var script,
ready,
where;
where = node || document.body;
ready = false;
script = where.ownerDocument.createElement('script');
script.src = src;
script.onload=script.onreadystatechange=function(){
if ( !ready && ( !this.readyState || this.readyState == 'complete' ) )
{
ready = true;
callback();
script.parentNode.removeChild(script);
}
};
where.appendChild(script);
}
我已经更新了功能,并在firefox中对其进行了测试.它同时适用于js和css(css需要一些跨浏览器检查.
我还想添加一些更多信息,说明为什么要使用script元素来预加载css而不是link元素.
加载页面时,需要分析影响DOM结构的资源,并按照它们出现的顺序进行插入.脚本元素需要在部分加载的DOM的上下文中执行,以便它们仅影响现有的DOM节点.
通过链接元素包含的样式表不会更改DOM(忽略可能通过url插入的javascript).在DOM树解析之前或之后加载样式表都没有关系,因此没有关于资源何时加载的回调.如果使用脚本元素链接到样式表,则在javascript解释器可以决定是否执行任何操作或是否应因异常而崩溃之前,仍然需要加载外部资源.
如果您在隐藏iframe的上下文中预加载每个脚本,则可以将所有错误包含在单独的上下文中,而不会导致页面上运行的javascript崩溃.
请注意:执行功能的外部脚本在删除之前仍然有机会执行.如果脚本正在执行ajax轮询或类似的不必要操作,请考虑不要预加载该特定脚本.
您可能可以使用“已加载”代替“完成”来解决此问题,但是有些较旧的浏览器仅支持onload,因此对于那些浏览器,脚本仍将执行.预加载实际上是用于需要在各种不同页面上调用的库组件的.
内容总结
以上是互联网集市为您收集整理的预加载javascript和CSS文件全部内容,希望文章能够帮你解决预加载javascript和CSS文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。