在計算機領域中最主要的性能優化技術之一就是「避免無謂的工做」,避免無謂的工做有兩層意思:第一是「別作可有可無的工做」(廢代碼),第二是重複已完成的工做。可有可無的工做在代碼重構的過程當中每每可以被發現,第二種常常難以發現和界定。javascript
避免重複的工做,以瀏覽器探測爲例:java
function addHandler(target,eventType,handler){
if(window.addEventListener) {
target.addEventListener(eventType,handler,false);
}else{
target.attachEvent('on' + eventType,handler);
}
}
複製代碼
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);
}
複製代碼
在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){
//處理
}
複製代碼