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

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

在页面加载性能当中,页面被阻塞是影响页面主要内容(包括图片等)及时呈现在用户面前的一个重要因素之一,所以我们需要在页面中合理处置外调CSS及JS文件。

来看一段代码

页面阻塞测试
  以下内容被阻塞  
  

有firebug的童鞋可以看到,页面内容及图片等被head里面的外调script及css文件所阻塞,页面加载耗时5.5S,如下图

样式表下面如果有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,如下图

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

页面阻塞测试
  以下内容将不会被阻塞  
  

 

 

转载地址:http://lmnao.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
linux下为什么删除了文件空间却不释放?
查看>>
shell脚本之循环语句
查看>>
感到自己自私和无力
查看>>
更改EMC-Powerpath软件的路径工作模式
查看>>
软件管理
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile
查看>>
LVM——逻辑卷管理
查看>>
离线安装gcc(CentOS7)
查看>>
客运车辆监管及运营平台
查看>>
eclipse添加注释
查看>>
贝叶斯估计和最大后验估计
查看>>
COBBLER无人值守安装
查看>>
基础知识--JAVA注解ElementType
查看>>
kickstart部署centos6.2 x86_64
查看>>
salt 的用户管理
查看>>
我封装的全文检索之solr篇
查看>>
NFC的第一次接触
查看>>
RHEL7 Connection closed by foreign host.
查看>>
Nodejs开发框架之Loopback介绍
查看>>