博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无阻塞加载脚本
阅读量:6253 次
发布时间:2019-06-22

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

通常加载页面的时候,对于组件是并行下载的,现代大部分浏览器对于Js同样也是支持并行下载,但是在脚本下载、解析并执行完毕之前,不会开始下载任何其他内容。

正常引入:

可以看出,在脚本下载完毕后的一段时间内(该时间在解析执行脚本),不会对其他组件进行下载,以下几种方案解决该问题。

 

1. XHR Eval加载脚本:

即使用ajax引入脚本,并通过eval对其执行。

代码:

 

var xhrObj = getXHRObject();  xhrObj.onreadystatechange = function(){      if(xhrObj.readyState == 4 && xhrObj.status == 200){           eval(xhrObj.respoenseText);      }  }  xhrObj.open('GET', 'js/User/search.js', true);  xhrObj.send();  function getXHRObject(){      var xhrObj = false;      if(window.XMLHttpRequest){            xhrObj = new XMLHttpRequest();        }else{            //IE6,5            xhrObj = new ActiveXObject("Microsoft.XMLHTTP");        }    return xhrObj;  };

 

 

 

该方法的主要缺点是:脚本必须部署在和主页面相同的域中,参见同源策略。

 

 

 

2.XHR注入:

类似于XHR Eval,XHR注入也是通过ajax来获取脚本,不同的是该方法为创建一个script的DOM元素,并将脚本内容插入。

代码(getXHRObject代码如上):

 

var xhrObj = getXHRObject();  xhrObj.onreadystatechange = function(){      if(xhrObj.readyState == 4 && xhrObj.status == 200){           var scriptElm = document.createElement('script');           document.getElementsByTagName('head')[0].appendChild(scriptElem);           scriptElm.text = xhrObj.responseText;      }  }xhrObj.open('GET', 'js/User/search.js', true);  xhrObj.send();

 

 

 

缺点:同上 受同源策略的影响。

 

3.Iframe引入:

该方法为将js改成html文件,并把外部脚本写进为内行脚本,同时需要对父级和iframe文档进行关联,同样受同源策略的影响。

 

 

 

 

缺点:iframe消耗性能大,维护性低,不推荐使用。

 

4.Script DOM Element

通过创建一个script的DOM元素,并设置其src引用脚本。

 

 

代码:

 

var scriptElm = document.createElement('script');  scriptElm.src = "js/User/search.js";           document.getElementsByTagName('head')[0].appendChild(scriptElm);

 

 

 

 

优点:代码短,不受同源策略影响,无需重构代码。

 

 

5.Defer

大部分浏览器支持的属性 在引用时加入

 

 

代码:

<script defer src="js/User/search.js"  ></script>

 

转载于:https://www.cnblogs.com/Darlietoothpaste/p/6517018.html

你可能感兴趣的文章
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
没有发布过产品的程序员不知道什么是真正的软件
查看>>
图论 - Travel
查看>>
服务器设计笔记(3)-----消息队列
查看>>
吐槽一下wp toolkit ToggleSwitch控件
查看>>
Ubuntu16.04上Docker的安装及基本用法
查看>>
步步为营 C# 技术漫谈 四、垃圾回收机制(GC)
查看>>
WPF基础之体系结构
查看>>
Linux源码-等待队列注释
查看>>
[转] .htaccess实现www 与没有www之间的重定向
查看>>
c实现统计字符中单词的个数,单词之间用空格分隔开。
查看>>
JavaScript(三) - 精简
查看>>
BZOJ2064:分裂——题解
查看>>
poj 1797 Heavy Transportation(最短路径Dijkdtra)
查看>>
[转] 拉格朗日对偶
查看>>
WPF 在事件中绑定命令
查看>>
《工作DNA》读后感
查看>>
基于WinDbg的内存泄漏分析
查看>>
《小故事》
查看>>
气象预警采集及推送
查看>>