完美解决JS文件页面加载时的阻塞问题
关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法。本文章就详细介绍xhr注入。
概述:js分拆的方法
1.xhr注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化为脚本使用,该方法不会造成页面渲染和onload事件的阻塞,因为是异步处理,推荐使用。
2.iframe注入:加载一个iframe框架,通过使用iframe框架中的脚本来避免src方式加载脚本的阻塞,但是iframe元素开销较大,不推荐。
3.dom注入:就是创建script元素,通过制定该元素的src并放入dom树中,根据该语句书写的文字不同,会造成渲染或onload事件的阻塞。
4. document.write方法:在js脚本中使用document.write('<script>xxx</script>');这种方法简单粗暴,但是它仍然会造成阻塞,所改变的只是什么时候阻塞。
详细介绍:
第一步:创造ajax函数:1建立xmlhttprequest或activexobject对象 2.ajax对象的open方法 3.ajax对象的send方法 4.改写onreadystatechange事件,判断status(200)和readystate(4)属性值,对请求数据类型操作。
第二步:用ajax函数请求一个js文件。
第三步:两个分支:第一种:拿来主义,eval(请求返回字符串);执行了js中的函数,达到目的。
第二种:创建script对象,利用该对象的text属性赋值 返回字符串 方式,达到目的。
看代码:
实例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>
以上这篇完美解决js文件页面加载时的阻塞问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。