完美解決JS文件頁(yè)面加載時(shí)的阻塞問(wèn)題
關(guān)于頁(yè)面加載時(shí)的時(shí)間消費(fèi),許多書(shū)中都做出了介紹,也提出了很多種方法。本文章就詳細(xì)介紹XHR注入。
概述:JS分拆的方法
1.XHR注入:就是用ajax異步請(qǐng)求同域包含腳本的文件,然后將返回的字符串轉(zhuǎn)化為腳本使用,該方法不會(huì)造成頁(yè)面渲染和onload事件的阻塞,因?yàn)槭钱惒教幚?,推薦使用。
2.iframe注入:加載一個(gè)iframe框架,通過(guò)使用iframe框架中的腳本來(lái)避免src方式加載腳本的阻塞,但是iframe元素開(kāi)銷(xiāo)較大,不推薦。
3.DOM注入:就是創(chuàng)建script元素,通過(guò)制定該元素的src并放入DOM樹(shù)中,根據(jù)該語(yǔ)句書(shū)寫(xiě)的文字不同,會(huì)造成渲染或onload事件的阻塞。
4. document.write方法:在JS腳本中使用document.write('<script>XXX</script>');這種方法簡(jiǎn)單粗暴,但是它仍然會(huì)造成阻塞,所改變的只是什么時(shí)候阻塞。
詳細(xì)介紹:
第一步:創(chuàng)造ajax函數(shù):1建立XMLHTTPRequest或ActiveXObject對(duì)象 2.ajax對(duì)象的open方法 3.ajax對(duì)象的send方法 4.改寫(xiě)onreadystatechange事件,判斷status(200)和readyState(4)屬性值,對(duì)請(qǐng)求數(shù)據(jù)類(lèi)型操作。
第二步:用ajax函數(shù)請(qǐng)求一個(gè)JS文件。
第三步:兩個(gè)分支:第一種:拿來(lái)主義,eval(請(qǐng)求返回字符串);執(zhí)行了JS中的函數(shù),達(dá)到目的。
第二種:創(chuàng)建script對(duì)象,利用該對(duì)象的text屬性賦值 返回字符串 方式,達(dá)到目的。
看代碼:
實(shí)例JS文件:創(chuàng)建一個(gè)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();
頁(yè)面使用該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文件頁(yè)面加載時(shí)的阻塞問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JS實(shí)現(xiàn)獲取圖片大小和預(yù)覽的方法完整實(shí)例【兼容IE和其它瀏覽器】
這篇文章主要介紹了JS實(shí)現(xiàn)獲取圖片大小和預(yù)覽的方法,結(jié)合完整實(shí)例形式分析了javascript針對(duì)不同瀏覽器處理圖片上傳與預(yù)覽等操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04
javascript實(shí)現(xiàn)商品圖片放大鏡
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)商品圖片放大鏡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
JavaScript實(shí)現(xiàn)對(duì)JSON對(duì)象數(shù)組數(shù)據(jù)進(jìn)行分頁(yè)處理
這篇文章主要介紹了使用JavaScript實(shí)現(xiàn)對(duì)JSON對(duì)象數(shù)組數(shù)據(jù)進(jìn)行分頁(yè)處理,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-10-10
JavaScript 手動(dòng)實(shí)現(xiàn)instanceof的方法
instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上,本文重點(diǎn)給大家介紹JavaScript手動(dòng)實(shí)現(xiàn)instanceof的問(wèn)題,感興趣的朋友跟隨小編一起看看吧2021-10-10
javasript實(shí)現(xiàn)密碼的隱藏與顯示
用戶(hù)輸入密碼時(shí)都是顯示的星號(hào)了,那么我們希望查看明文要怎么查看呢,下面我們只要使用一段簡(jiǎn)單的js就可以實(shí)現(xiàn)查看密碼框的明文了,有需要的小伙伴可以來(lái)參考下。2015-05-05
Javascript實(shí)現(xiàn)簡(jiǎn)單的富文本編輯器附演示
這篇文章主要介紹了通過(guò)Javascript實(shí)現(xiàn)的簡(jiǎn)單富文本編輯器,需要的朋友可以參考下2014-06-06
JavaScript中高階函數(shù)的巧妙運(yùn)用
JavaScript中的高階函數(shù)是指可以接受其他函數(shù)作為參數(shù)或者返回一個(gè)函數(shù)作為結(jié)果的函數(shù),本文介紹了JS中一些高階函數(shù)的妙用,希望對(duì)大家有所幫助2023-05-05
解決typescript項(xiàng)目報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類(lèi)型聲明問(wèn)題
這篇文章主要介紹了解決typescript項(xiàng)目報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類(lèi)型聲明問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
js 限制數(shù)字 js限制輸入實(shí)現(xiàn)代碼
在工作中經(jīng)常會(huì)遇到j(luò)s限制輸入方面的要求,本文將詳細(xì)介紹其實(shí)現(xiàn)原理,需要的朋友可以參考下2012-12-12
JS實(shí)現(xiàn)CheckBox復(fù)選框全選全不選功能
在網(wǎng)站的管理后臺(tái)應(yīng)用此功能居多,如一次性處理多個(gè)產(chǎn)品,或?qū)ξ恼碌膭h除對(duì)產(chǎn)品的下架等處理,一條一條的點(diǎn)顯然有一些麻煩,如果能每一行放一個(gè)checkbox,然后統(tǒng)一處理就好辦的多了,今天我就用簡(jiǎn)單的篇幅來(lái)講解一下這個(gè)功能的實(shí)現(xiàn)原理和實(shí)現(xiàn)過(guò)程。2015-05-05

