簡體   English   中英

字符串連接的javascript性能

[英]javascript peformance on string concatenation

我閱讀了有關字符串連接和作用域變量上的javasccript性能的文章 ,因此我按照建議的方式重寫了一些代碼,但建議的方式要慢得多 我正在使用Chrome和IE進行測試:相似的結論。

基本上,我有一個包含字符串的對象,並且我遍歷每個值以生成HTML。 我正在比較的兩種方式正在做:

var TheHTML = "";
TheHTML = TheHTML + ...;

另一種方法是使用數組並加入

TheHTML[i++] = ....;

在這里擺弄 我正在使用的代碼如下所示:

var ObjectTest = {};

ObjectTest.Key1 = "The Key 1";
ObjectTest.Key2 = "The Key 2";
ObjectTest.Key3 = "The Key 3";
ObjectTest.Key4 = "The Key 4";
ObjectTest.Key5 = "The Key 5";

function TestSpeed() {

    var TheHTML1 = "";
    var THeHTML2 = "";

    var TheStart1 = new Date().getTime();
    for (var TestPerf1 = 0; TestPerf1 < 100000; TestPerf1++) {

        TheHTML1 = "";
        TheHTML1 = TheHTML1 + '<div style="clear:both">' + ObjectTest.Key1 + '</div>';
        TheHTML1 = TheHTML1 + '<div style="clear:both">' + ObjectTest.Key2 + '</div>';
        TheHTML1 = TheHTML1 + '<div style="clear:both">' + ObjectTest.Key3 + '</div>';
        TheHTML1 = TheHTML1 + '<div style="clear:both">' + ObjectTest.Key4 + '</div>';
        TheHTML1 = TheHTML1 + '<div style="clear:both">' + ObjectTest.Key5 + '</div>';
        TheHTML1 = TheHTML1 + '<br><br>';

    }
    document.getElementById('TestOutput1').innerText = new Date().getTime() - TheStart1;
    document.getElementById('Output1').innerHTML = TheHTML1;


    var TheStart2 = new Date().getTime();
    var ObjectTestCopy = ObjectTest;

    for (var TestPerf2 = 0; TestPerf2 < 100000; TestPerf2++) {

        var Test = [];
        var i = 0;

        Test[i++] = '<div style="clear:both">' + ObjectTestCopy.Key1 + '</div>';
        Test[i++] = '<div style="clear:both">' + ObjectTestCopy.Key2 + '</div>';
        Test[i++] = '<div style="clear:both">' + ObjectTestCopy.Key3 + '</div>';
        Test[i++] = '<div style="clear:both">' + ObjectTestCopy.Key4 + '</div>';
        Test[i++] = '<div style="clear:both">' + ObjectTestCopy.Key5 + '</div>';
        Test[i++] = '<br><br>';

        TheHTML2 = Test.join("");
    }
    document.getElementById('TestOutput2').innerText = new Date().getTime() - TheStart2;
    document.getElementById('Output2').innerHTML = TheHTML2;
}

window.onload = function () { TestSpeed(); }

為什么建議的代碼較慢?

如果您閱讀整篇文章,將對您有所幫助:

但是,瀏覽器字符串優化已更改了字符串串聯圖片。

Firefox是第一個優化字符串連接的瀏覽器。 從1.0版開始,在所有情況下,數組技術實際上都比使用plus運算符慢。 其他瀏覽器還優化了字符串連接,因此Safari,Opera,Chrome和Internet Explorer 8使用plus運算符也顯示出更好的性能。 版本8之前的Internet Explorer沒有進行這種優化,因此數組技術始終比plus運算符快。

不確定,但我認為它的速度較慢,因為您正在不斷更新陣列。 但是根據我自己的測試

  var iable = ['a','b','c','d','e','f'].join('');

比...快

  var iable = 'a'+'b'+'c'+'d'+'e'+'f';

使用循環來生成代碼,而不是在代碼本身內部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM