博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
页面无阻塞加载研究
阅读量:7257 次
发布时间:2019-06-29

本文共 1543 字,大约阅读时间需要 5 分钟。

hot3.png

在页面加载性能当中,页面被阻塞是影响页面主要内容(包括图片等)及时呈现在用户面前的一个重要因素之一,所以我们需要在页面中合理处置外调CSS及JS文件。
来看一段代码:
页面阻塞测试
以下内容被阻塞
有firebug的童鞋可以看到,页面内容及图片等被head里面的外调script及css文件所阻塞,页面加载耗时5.5S,如下图
12105032_tf17.jpg
样式表下面如果有script标签则同样会阻塞后续页面内容的加载,但我们通常希望优先加载样式表,这样才不会看到裸奔的页面,所以我们只须关注script的无阻塞加载即可。
看下面这一段js
function loadScript(url, callback) {        //创建script        var script = document.createElement("script");        script.type = "text/javascript";        script.src = url;        document.getElementsByTagName("head")[0].appendChild(script);        //加载完毕回调        if(script.readyState) { //for IE                script.onreadystatechange = function() {                        if(script.readyState == "loaded" || script.readyState == "complete") {                                script.onreadystatechange = null; //此处销毁事件引用,防止IE下事件驻留内存                                if(callback){callback();}                        }                };        } else { //for Others                script.onload = function() {                        if(callback){callback();}                };        }}

以上代码可以看出,我们是用一个js动态创建一个script标签,然后赋值src来进行加载外部JS,同时提供一个回调函数,以保证在脚本加载完毕才执行的那些函数代码可以正常运行。

再看一下优化后的页面

页面阻塞测试
以下内容将不会被阻塞
再次用firebug可以看到图片已经没有被脚本阻塞,与脚本是并行加载的,整个页面加载时间也减少不少,页面总耗时减少为2.9S,如下图:

12105033_hOXf.jpg

但还是有问题,在loadScript与页面内容之间如果还有script标签的话,一样会阻塞内容下载,解决方案就是给loadScript加个setTimeout执行,彻底将加载JS移出文档加载流,实现异步加载,就不会再阻塞页面其他内容了,看如下完整代码:

页面阻塞测试
以下内容将不会被阻塞
当然如果可能的话,就尽量将script置于底部,就没有阻塞的问题了,就像yslow所建议那样,put style top,put script bottom!!

转载于:https://my.oschina.net/ydsakyclguozi/blog/175621

你可能感兴趣的文章
k8s与数据分析--利用redash做自助数据分析
查看>>
DQL、DML、DDL、DCL的概念与区别
查看>>
想成长为一名年薪50万+的实战型架构师?必掌握这7大实战技能经验 ...
查看>>
「镁客早报」三星折叠屏手机中国区发布会临时取消;特斯拉在地库中突然自燃...
查看>>
消息队列的流派之争
查看>>
中国学术力量不容小觑,首届华人带头的国际分布式人工智能学术会议将于北京召开...
查看>>
从Kubernetes 1.14 发布,看技术社区演进方向
查看>>
云计算的智慧城市架构
查看>>
Unity 事件函数的执行顺序
查看>>
Git教程6——常用命令总结
查看>>
应用统计学与R语言实现笔记(番外篇一)——判别分析更正
查看>>
Linux系统管理---进程管理(查看进程、终止进程、更改进程优先级)
查看>>
java.util.Collection源码分析和深度讲解
查看>>
安卓开发笔记(十):升级ListView为RecylerView的使用
查看>>
大数据就业方向中,主要划分为哪些职位?
查看>>
社交系统ThinkSNS+版本的 SPA(H5)安装教程
查看>>
5G通讯解决方案公司佰才邦Baicells完成亿元B+轮融资,高通领投
查看>>
海外“水逆”还在持续,华为落选韩国电信5G设备供应商
查看>>
zookeeper - 选举(2)
查看>>
jquery datetimepicker日期时间控件
查看>>