最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript 函數(shù)惰性載入的實(shí)現(xiàn)及其優(yōu)點(diǎn)介紹

 更新時間:2013年08月12日 16:01:49   作者:  
惰性載入表示函數(shù)執(zhí)行的分支只會在函數(shù)第一次掉用的時候執(zhí)行,在第一次調(diào)用過程中,該函數(shù)會被覆蓋為另一個按照合適方式執(zhí)行的函數(shù),這樣任何對原函數(shù)的調(diào)用就不用再經(jīng)過執(zhí)行的分支了
最近看JavaScript高級程序設(shè)計(jì),大有收獲,接下來幾天寫一下讀書筆記。之前寫了一篇Ajax初步理解的隨筆,里面有個函數(shù)用來創(chuàng)建XmlHttpRequest對象,瀏覽器兼容性原因,寫出的代碼通過大量if判斷或者try,catch語句將函數(shù)引導(dǎo)到正確代碼處。
復(fù)制代碼 代碼如下:

<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>

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

惰性載入

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

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中第一次執(zhí)行的時候每個分支都會為createXHR重新賦值,覆蓋原函數(shù),返回xhr對象,而第二次執(zhí)行的時候就會直接調(diào)用重寫后的函數(shù),這樣就不必執(zhí)行每個分支重新做檢測了。

優(yōu)點(diǎn)

惰性載入函數(shù)有兩個主要優(yōu)點(diǎn),第一是顯而易見的效率問題,雖然在第一次執(zhí)行的時候函數(shù)會意味賦值而執(zhí)行的慢一些,但是后續(xù)的調(diào)用會因?yàn)楸苊獾闹貜?fù)檢測更快;第二個是要執(zhí)行的適當(dāng)代碼只有當(dāng)實(shí)際調(diào)用函數(shù)是才執(zhí)行,很多JavaScript庫在在加載的時候就根據(jù)瀏覽器不同而執(zhí)行很多分支,把所有東西實(shí)現(xiàn)設(shè)置好,而惰性載入函數(shù)將計(jì)算延遲,不影響初始腳本的執(zhí)行時間。

相關(guān)文章

最新評論

页游| 苏尼特右旗| 万全县| 平定县| 姜堰市| 灌南县| 信宜市| 都匀市| 孟州市| 工布江达县| 吴堡县| 临沭县| 伊春市| 金堂县| 无锡市| 房山区| 宝鸡市| 安阳县| 石楼县| 灵武市| 庆元县| 库车县| 崇阳县| 准格尔旗| 马公市| 周至县| 天台县| 精河县| 苍南县| 嘉峪关市| 安康市| 赤壁市| 孟连| 安阳市| 江川县| 松江区| 青神县| 广昌县| 福海县| 彩票| 阿拉善左旗|