国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript 函數惰性載入的實現及其優點介紹

2019-11-20 22:25:23
字體:
來源:轉載
供稿:網友
最近看JavaScript高級程序設計,大有收獲,接下來幾天寫一下讀書筆記。之前寫了一篇Ajax初步理解的隨筆,里面有個函數用來創建XmlHttpRequest對象,瀏覽器兼容性原因,寫出的代碼通過大量if判斷或者try,catch語句將函數引導到正確代碼處。
復制代碼 代碼如下:

<script type="text/javascript">
function createXHR(){
var xhr = null;
try {
// Firefox, Opera 8.0+, Safari,IE7+
xhr = new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
xhr = null;
}
}
}
return xhr;
}
</script>

每次調用這個函數的時候,都要先進行瀏覽器能力檢查,首先檢查瀏覽器是否支持內置的XMLHyypRequest對象,如果不支持然后檢查各版本基于ActiveX的XMLHttpRequest,每次調用該函數都是這樣,其實當第一次執行完后,如果瀏覽器支持某個特定XMLHttpRequest對象,那么下次執行的時候這種支持性并不會改變,沒必要再進行一邊檢測,即使只有一個if語句,執行也肯定比沒有要慢,如果我們可以讓if語句不必每次執行,那么就可以在頻繁調用的情況下提高執行速度。解決方案就是稱之為惰性載入的技巧。

惰性載入

惰性載入表示函數執行的分支只會在函數第一次掉用的時候執行,在第一次調用過程中,該函數會被覆蓋為另一個按照合適方式執行的函數,這樣任何對原函數的調用就不用再經過執行的分支了。createXHR函數可以被改寫為這樣
復制代碼 代碼如下:

function createXHR(){
var xhr=null;
if(typeof XMLHttpRequest !='undefined'){
xhr = new XMLHttpRequest();
createXHR=function(){
return new XMLHttpRequest();
}
}else{
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
createXHR=function(){
return new ActiveXObject("Msxml2.XMLHTTP");
}
}
catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
createXHR=function(){
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
catch (e) {
createXHR=function(){
return null;
}
}
}
}
return xhr;
}

在這個惰性載入的createXHR中第一次執行的時候每個分支都會為createXHR重新賦值,覆蓋原函數,返回xhr對象,而第二次執行的時候就會直接調用重寫后的函數,這樣就不必執行每個分支重新做檢測了。

優點

惰性載入函數有兩個主要優點,第一是顯而易見的效率問題,雖然在第一次執行的時候函數會意味賦值而執行的慢一些,但是后續的調用會因為避免的重復檢測更快;第二個是要執行的適當代碼只有當實際調用函數是才執行,很多JavaScript庫在在加載的時候就根據瀏覽器不同而執行很多分支,把所有東西實現設置好,而惰性載入函數將計算延遲,不影響初始腳本的執行時間。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华安县| 玛曲县| 大方县| 思茅市| 腾冲县| 聂拉木县| 苍山县| 东乡县| 页游| 麻城市| 英吉沙县| 金山区| 新龙县| 望都县| 盘锦市| 肇州县| 乌拉特后旗| 田东县| 横峰县| 大英县| 古交市| 当雄县| 固镇县| 普陀区| 高阳县| 建湖县| 宜宾县| 清苑县| 镇雄县| 钟祥市| 铜山县| 广饶县| 嘉定区| 辛集市| 林甸县| 九龙县| 原平市| 镇康县| 枣强县| 泾源县| 黄骅市|