js FOR迴圈效率問題

2021-09-01 21:05:59 字數 1646 閱讀 8549

**:

引:每個接觸js的開發人員都不可避免的與for迴圈打交道,畢竟這是遍歷必不可少的工具之一。然而當迴圈次數比較大時,效率問題必須重視。在群眾,站長提出了這個話題,回去好好想了下,整理出來,大家一起討論討論。

1. 倒序比正序效率高?

聽好多人說,倒序效率更高,好吧,做個實驗,讓事實說話

測試**:

複製**

測試結果如下圖 test1:

第一列值為

執行正序時間,第二列為倒序執行時間。

可以看出在ie6和ie7中效率基本持平,而在ie8,谷歌瀏覽器中,倒序反而比正序還要慢,當然這是在js中做的測試

結論:js的for迴圈,在ie6,ie7中倒序的效率不比正序高,反而在ie8與谷歌瀏覽器中正序效率更高。其他瀏覽器為測試。

2.迴圈體中,區域性變數優化問題

在迴圈體內部,我們可能會宣告一些區域性變數(物件)來處理資料。如果變數宣告不當,也會影響效率。

看例子

複製**

在迴圈體中,宣告了乙個陣列作為區域性變數。

測試結果如下:

第一列值為在迴圈體內執行的時間,第二列在起始語句中執行的時間。

可以看出在ie6和ie7中優化的效率接近15倍,在ie8中10倍,谷歌瀏覽器執行速度快,但也優化了3倍以上,還是在js中做的測試

結論:js的for迴圈,在ie6、ie7、e8與谷歌瀏覽器中通過對區域性變數的優化可以成倍的提高執行效率。其他瀏覽器為測試。

補 充:原來都是將區域性變數的宣告放到for迴圈外,但站長提醒,這樣的話,區域性變數的生存週期會變長,直到for的父級執行完後,所佔記憶體才會釋放。不過通 過做了幾個小例子,沒有明顯的區別,主要是因為在測試中區域性變數占用的記憶體較少,而且這種區域性變數的量也較少,所以效果不明顯。

3.條件判斷語句中,盡量使用變數來判斷而不要去呼叫方法

在for的判斷語句中,經常遇到迴圈變數與某個值進行比較。而這個值經常是list的長度,或者某個資料的大小。雖然這些資料結構有已經定義好的求長求大小的方法。但是每次判斷時都會執行一次,也會影響效率。

看列子

複製**

執行結果比較

第一列值為在判斷語句中有方法呼叫執行的時間,第二列在判斷語句中使用變數執行的時間。

可以看出在ie6、ie7和ie8中接近4倍,谷歌瀏覽器執行速度快,但也優化了10倍以上

結論:js的for迴圈,在ie6、ie7、e8與谷歌瀏覽器中通過對判斷語句的優化可以成倍的提高執行效率。其他瀏覽器未測試。

4. 巢狀迴圈問題

即乙個for迴圈中還巢狀這另一層for迴圈,可能這種巢狀是多層的。

這個留給大家自己測試,我的測試結果是裡外迴圈次數相差不大。但是有個原則,

盡量把迴圈次數少的寫到最外層

。總結:js的for 迴圈中,

效能的優化主要通過減少迴圈體中變數的宣告和外部方法的呼叫來實現

。例子3中所講的判斷語句的優化其實也是對迴圈體中外部方法呼叫的優化。我在寫後台時,遇到過在for迴圈中寫sql的例子,每次迴圈都訪問一次資料庫,這個效率是極低的

5:js for迴圈特殊結束方法:  條件區ss=ssss[i]中ssss[2]為undifend

demo:

js for迴圈例項

1.求1 100的寄數和?2.奇數求和 var ppt 0 for var i 1 i 100 i 2 2.求1 100的偶數和 var num 0 for var i 0 i 100 i 2 document.write 偶數和 num 3.總和 var num1 0 for var i 0 i ...

js for迴圈 while迴圈介紹

名稱 作用初始化變數 通常被用於初始化乙個計數器,該表示式可以使用 var 關鍵字宣告新的變數,這 個變數幫我們來記錄次數。條件表示式 用於確定每一次迴圈是否能被執行。如果結果是 true 就繼續迴圈,否則退出循 環。操作表示式 用於確定每一次迴圈是否能被執行。如果結果是 true 就繼續迴圈,否則...

js for迴圈的陷阱

一頁面有三個按鈕,點選提示相應內容。相應內容已從後台獲取,並轉化成json陣列。var content 提示1 提示2 提示3 for i in content replace i selector val content i selector click function 結果 點選按鈕,每乙個都...