js優化之惰性加載函數

js優化之惰性加載函數

直接上案例,copy後保存爲html文件,打開瀏覽器控制檯即可看到效果。未優化的addEvent,每調用一次都會進行一次判斷。而優化後的addEvent只在首次被調用時進行判斷,其後再次調用時,將不再進行瀏覽器支持的事件監聽判斷。

注意:調用時,記得註釋其他兩個addEvent

<body>

    <div id="div1">div1</div>
</body>
<script type="text/javascript">


/* 優化方案一:方法重寫後再調用*/
function addEvent (type, element, fun) {
    if (element.addEventListener) {
        console.log(123);
        addEvent = function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if(element.attachEvent){
        addEvent = function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else{
        addEvent = function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
    addEvent(type, element, fun);
}


/* 優化方案二:匿名函數重寫與執行*/
var addEvent = (function(type, element, fun) {
    if (window.addEventListener) {
        console.log(123);
        return function(type, element, fun) {
            element.addEventListener(type, fun, false) //webkit、os
        }
    }
    if (window.attachEvent) {
        return function(type, element, fun) {
            element.attachEvent('on' + type, fun) //IE瀏覽器
        };
    }
})();


/* 沒有優化的添加事件方法:每次調用都會判斷*/
function addEvent (type, element, fun) {
    if (element.addEventListener) {
        console.log(123);
        element.addEventListener(type, fun, false);


    }
    else if(element.attachEvent){
        element.attachEvent('on' + type, fun);
    }
    else{
        element['on' + type] = fun;
    }
}
var div = document.getElementById('div1');
addEvent( 'click',div, function() {
    alert(1);
})
addEvent( 'click',div, function() {
    alert(2)
})

</script>


惰性載入函數有兩個主要優點:

第一是顯而易見的效率問題,雖然在第一次執行的時候函數會意味賦值而執行的慢一些,但是後續的調用會因爲避免的重複檢測更快;

第二個是要執行的適當代碼只有當實際調用函數是才執行,很多JavaScript庫在在加載的時候就根據瀏覽器不同而執行很多分支,把所有東西實現設置好,而惰性載入函數將計算延遲,不影響初始腳本的執行時間。


惰性載入函數應用場景總結(以下2條件同時滿足):

1 應用頻繁,如果只用一次,是體現不出它的優點出來的,用的次數越多,越能體現這種模式的優勢所在;

2 固定不變,一次判定,在固定的應用環境中不會發生改變;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章