提高javascript運行速度的編程實踐(延遲加載、條件預加載和位運算)

1、避免重複工做

在計算機領域中最主要的性能優化技術之一就是「避免無謂的工做」,避免無謂的工做有兩層意思:第一是「別作可有可無的工做」(廢代碼),第二是重複已完成的工做。可有可無的工做在代碼重構的過程當中每每可以被發現,第二種常常難以發現和界定。javascript

避免重複的工做,以瀏覽器探測爲例:java

function addHandler(target,eventType,handler){
   if(window.addEventListener) {
        target.addEventListener(eventType,handler,false);
   }else{
        target.attachEvent('on' + eventType,handler);
   }
}
複製代碼

一、延遲加載的方式(lazy loading等到用的時候再去判斷,而且永久保存)

function addHandler(target,eventType,handler){
   if(window.addEventListener) {
        addHandler = function(target,eventType,handler){
            target.addEventListener(eventType,handler,false);
        }
   }else{
        addHandler = function(target,eventType,handler){
            target.attachEvent('on' + eventType,handler);
        }
   }
   addHandler(target,eventType,handler);
}
複製代碼

二、條件預加載的方式(腳本加載的時候就進行判斷,而且永久保存)

var addHandler = window.addEventListener?function(target,eventType,handler){
        target.addEventListener(eventType,handler,false);
    }:function(target,eventType,handler){
        target.attachEvent('on' + eventType,handler);
    }
複製代碼

2、位運算

在javascript中的數字都是以64位格式進行存儲,而在位操做中,數字被轉換爲有符號的32位格式。儘管須要轉換,位運算依然比其餘的數學運算和布爾值操做快不少。經過toString方法能夠數字轉換成字符串的二進制表達式。位運算有四種邏輯操做符:AND(與),OR(或),XOR(亦或),NOT(非)。瀏覽器

一、使用位運算代替普通的數字計算(取模運算爲例,就能夠擁有快一倍的速度)

for(var i=0,len = 100000;i<len;i++){
    if(i&1){
        console.log('odd');    //二進制數中,最低位是1的爲奇數
    }else{
        console.log('even');
    }
}
複製代碼

二、位掩碼運算(用於處理同時存在多個布爾值的選項)

假設存在1,2,4,8,16多種條件,能夠經過AND運算來判斷是否達到某條件。性能優化

const con1 = 1,
        con2 = 2,
        con3 = 4,
        con4 = 8,
        con5 = 16;
    var options = con1|con2|con3;     //假設知足該三種條件,經過OR運算賦予
    
    //經過AND判斷
    if(options&con2){
        //處理
    }
複製代碼
相關文章
相關標籤/搜索