字符串连接的javascript性能

时间:2012-03-21 16:42:36

标签: javascript

我在字符串连接和范围变量上阅读了article有关javasccript性能的内容,所以我按照建议的方式重新编写了一些代码,但建议的方式慢得多。我正在使用Chrome和IE测试:类似的结论。

基本上,我有一个包含字符串的对象,我循环遍历每个值以生成HTML。我正在比较的两种方式是:

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

另一种方法是使用数组并加入

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

我有一个fiddle here我正在使用的代码如下所示:

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(); }

为什么建议的代码速度较慢?

2 个答案:

答案 0 :(得分:1)

如果你阅读完整篇文章会有所帮助:

  

但是,浏览器字符串优化已经改变了字符串连接图片。

     

Firefox是第一个优化字符串连接的浏览器。从版本1.0开始,阵列技术实际上比在所有情况下使用plus运算符慢。其他浏览器也优化了字符串连接,因此Safari,Opera,Chrome和Internet Explorer 8也使用plus运算符显示更好的性能。版本8之前的Internet Explorer没有这样的优化,因此阵列技术总是比plus运算符更快。

答案 1 :(得分:0)

不确定,但我认为它更慢,因为你不断更新阵列。但是从我自己的测试来看,

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

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

使用循环生成代码,而不是代码本身。