再論Javascript下字串串連的效能

來源:互聯網
上載者:User

1 如何進行字串串連?

首先讓我們來回顧一下字串串連的兩種常用方法:
1.1 使用字串串連運算子

常用的語言(如Java、C#、PHP等)都有字串串連運算子,Javascript也不例外,程式碼範例:
複製代碼 代碼如下:
var str = "";
str = str + "a";

1.2 使用數組

在常用的語言中,字串串連運算的效能普遍不高,為此在C#中就專門提供了StringBuilder(Java中提供了StringBuffer)用於連接字串。而在Javascript中就出現了通過Array類比StringBuilder的方案。
複製代碼 代碼如下:
var str = [];
for (var i = 0; i < 100; i++) {
  str[i] = "12345";
}
str = str.join("");

2 測試

下面通過複製字串的過程來測試兩種方法的效能:
2.1 通過字串串連運算子進行複製:
複製代碼 代碼如下:
function copyByOperator(str, times) {
  var newStr = "";
  for (var i = 0; i < times; i++) {
    newStr += str;
  }
  return newStr;
}

2.2 通過數組進行複製:
複製代碼 代碼如下:
function copyByArray(str, times) {
  var newStr = [];
  for (var i = 0; i < times; i++) {
    newStr[i] = str;
  }
  return newStr.join("");
}

str採用一段固定的HTML字串,長度是61。
2.3 IE下的測試

考慮到IE的效能比較差,先用小的times值(6000)在IE 6、IE 7和IE 8下面測試。運行10次後取平均值,結果如下:

IE瀏覽器下的測試結果
瀏覽器 copyByOperator copyByArray
IE 6 1780.4ms 9.5ms
IE 7 1754.6ms 7.7ms
IE 8 1.6ms 9.4ms

IE6、7與IE8的測試結果相距甚遠,很明顯地,IE 8對字串串連運算進行了最佳化,效率已經高於數組複製法

2.4 各種瀏覽器下的測試

下面再用比較大的times值(50000)對最新版本的各種瀏覽器進行測試。

各種瀏覽器的測試結果
瀏覽器 copyByOperator copyByArray
IE 8 21.8ms 54.7ms
Firefox 3.6 40.9ms 27.9ms
Chrome 4 4.4ms 10.9ms
Safari 4.0.5 41.6ms 34.6ms
Opera 10.50 33.1ms 23ms

這個結果真是出人意料。IE 8下的字串串連運算竟然把Chrome以外的瀏覽器都打敗了,那些老說IE效能低下的可要注意點了。而在Chrome下也出現了字串串連運算比數組複製法高效的情況。

3 總結

瀏覽器的效能在不斷地提高,作為前端工程師,也要適時調整Javascript程式的最佳化策略,以獲得最佳的效能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.