关于页面加载时的时间消费,许多书中都作出了介绍,也提出了不少种方法。本文章就详细介绍XHR注入。javascript
概述:JS分拆的方法css
1.XHR注入:就是用ajax异步请求同域包含脚本的文件,而后将返回的字符串转化为脚本使用,该方法不会形成页面渲染和onload事件的阻塞,由于是异步处理,推荐使用。html
2.iframe注入:加载一个iframe框架,经过使用iframe框架中的脚原本避免src方式加载脚本的阻塞,可是iframe元素开销较大,不推荐。java
3.DOM注入:就是建立script元素,经过制定该元素的src并放入DOM树中,根据该语句书写的文字不一样,会形成渲染或onload事件的阻塞。ajax
4. document.write方法:在JS脚本中使用document.write('<script>XXX</script>');这种方法简单粗暴,可是它仍然会形成阻塞,所改变的只是何时阻塞。app
详细介绍:
第一步:创造ajax函数:1创建XMLHTTPRequest或ActiveXObject对象 2.ajax对象的open方法 3.ajax对象的send方法 4.改写onreadystatechange事件,判断status(200)和readyState(4)属性值,对请求数据类型操做。框架
第二步:用ajax函数请求一个JS文件。异步
第三步:两个分支:第一种:拿来主义,eval(请求返回字符串);执行了JS中的函数,达到目的。函数
第二种:建立script对象,利用该对象的text属性赋值 返回字符串 方式,达到目的。url
看代码:
实例JS文件:建立一个100X100的黑色div,并加载到指定元素中。
function test() { oDiv = document.createElement('div'); oDiv.style['width'] = '100px'; oDiv.style['height'] = '100px'; oDiv.style['background'] = 'black'; document.getElementById('header').appendChild(oDiv); } test();
页面使用该JS文件
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <style type="text/css"> *{ margin:0; padding:0;} </style> </head> <body> <div id="header" style=" height:150px; background-color:Red;"></div> <div id="init"> <script type="text/javascript"> //Ajax获取字符串 function Ajax(Method,url,funcSucc,funcFalse) { if (XMLHttpRequest) var oAjax = new XMLHttpRequest(); else { var oAjax = new ActiveXObject('Microsoft.XMLHTTP'); } oAjax.open(Method, url, true); oAjax.send(); oAjax.onreadystatechange = function () { if (oAjax.readyState == 4) { if (oAjax.status == 200) { var str = oAjax.responseText; funcSucc(str); } else { funcFalse(); } } }; Ajax('GET', 'javascript/load.js', function (str) { eval(str); // var oScript = document.createElement('script'); // oScript.text = str; // document.getElementsByTagName('head')[0].appendChild(oScript); }, function () { alert('失败'); }); </script> </div> </body> </html>