提高javascript效率:一次判斷,而不要次次判斷

來源:互聯網
上載者:User

判斷嘛,就是面臨2個或以上的選項時進行選擇。比如我家門前去公司有一個岔路,只要我第一次知道了哪一條路是對的,那我下一次或以後的每次都不用再思考了,直接走那條路即可——當然,突發天災時不算。

做出判斷是需要時間的,是需要對應條件的。正確的判斷很好,但每次面臨岔路,哪怕是走了無數次的岔路,都來進行一下判斷,無疑是一種腦殘行為。

下面來看一個我們平時經常看到的JS函數,他的作用是判斷瀏覽器類型然後設定對應的透明度屬性:

function setAlpha(obj,alpha){ 
if (-[1,]) obj.style.opacity = alpha / 100;
else obj.style.filter = "alpha(opacity=" + alpha + ")";
}

這個函數有錯嗎?沒有。先判斷瀏覽器是否是標準瀏覽器,如果是,就直接通過opacity設定透明;如果不是,則使用IE濾鏡來實現透明度。

邏輯清晰,代碼簡練,精品啊!

不過,沒有錯誤,卻有失誤。

通常,這種設定透明度的函數都會用來製作淡入淡出效果,也就是說它會被setTimeout一次次的調用,直到迴圈結束。

這時候問題就來了。回到前面的岔路問題,這個函數就相當於,每次來到路口,都要思考判斷。第1次,來到路口,騷等,我看看,噢,是firefox啊,走第1條路;第2次,又來到這路口,等等,我看看,噢,又是firefox啊,還走第1條路……第3次……第4次。。。。不管多少次,這個函數都會像最敬業的交警一樣來查看你的身份————你,不煩嗎?你不煩我都煩了!

這時候,如果你是過路的,你肯定希望這個交警消失。

其實,遇到岔路我們可以這樣:既然已經知道只走一條路,那我乾脆把另外的路給堵死算了!當然在現實生活中不可能這樣做,不過在代碼裡卻不難實現,換個思路即可。

javascript有個神奇的地方,就是匿名函數(通常用來自執行),自執行函數的意思是呢,他聲明的時候就執行掉了,以後就不會再出現了,你想找都不定能找到!個人覺得,這個性不錯。

看下面的代碼,同樣是設定透明度的函數:

var setAlpha = (function(obj,alpha){ 
var set;
if (-[1,]) {
set = function (obj,alpha) {
obj.style.opacity = alpha * 0.01;
}
}
else {
set = function(obj,alpha){
obj.style.filter = "alpha(opacity=" + alpha + ")";
}
}
return set;
})()

也許你要不滿了:這是什麼玩意兒啊,好像初學者的水平(被你看穿了。。。)但是!這個卻比前面的版本效率高很多。不信你可以在firefox和ie6下分別alert一下這個函數,就明白了。

通過自執行函數,當聲明setAlpha的時候就執行了函數,而這個函數的作用就是,判斷瀏覽器,並確定該使用哪種設定透明度的方法。由於瀏覽器的類型在開啟頁面後就不可能再變化,也就是以後都不用再判斷了。就算你調用10萬次這個函數,他也不會再判斷,而是直接執行。

雖然代碼醜,但境界就不同了…

這個例子只是一個小小示範,我只是希望你能明白【一次判斷,而不要次次判斷】的道理,並發揚光大。減少判斷次數,對js的效率是一個很大的提高。

原文連結: http://www.jo2.org/archives/302.htm.

另外:我聽說js裡乘法的效率比除法效率高,有沒有這回事兒?求闢謠

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.