字符串concat,测试,添加额外的代码或者最后添加并删除?

时间:2015-07-23 18:44:19

标签: javascript performance

对于这个奇怪的头衔很抱歉,我确定之前有人问过类似的东西。我的问题是,我正在构建一个包含html标签的字符串,我的问题是更好地测试和添加额外的标签,在这种情况下是<br />,或者无论如何添加标签并拥有& #39;清除&#39;最后一行,哪个更快?:

所以目前我们已经

bFirst = true;
label = '';

if(...)
{
  if (!bFirst)
  label += '<br/>';

  label+= 'some more text'
}

if(...)
{
  if (!bFirst)
  label += '<br/>';

  label+= 'some more text'
}

依旧......

if()
{
  label+= 'some more text <br />'
}

然后使用string.substring()方法删除最后一个<br />

哪个更快,更好,更正确?我不需要代码,这实际上是一个性能问题,我可以测试一下,但我确定之前有人这样做了。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用此过程定义哪种方式最快:

要求: 您需要一个像firebugpagespeed

这样的插件

您必须执行这两页:

添加所有额外文字,然后修剪一些:

<div id ="concat"></div>

<script type="text/javascript">

var someText = ""
// adds "foo" 10k times
for (i = 0; i < 10000; i++) {
    someText += "foo"
}

// crops the 3 last characters off the string 5k times
for (i = 0; i < 5000; i++) {
    someText.substr(someText.length - 3, someText.length);
}

// append the final string
$('#concat').append(someText);
</script>

在我的浏览器上,需要0.19秒到0.30秒。

在需要时添加额外的文字

<div id ="if"></div>
<script type="text/javascript">

var someText = ""
var append = true;
for (i = 0; i < 15000; i++) {
    //adds "foo" the first 10k times
    if(append == true){
        someText += "foo";
    }
    if(i == 10000){
        append = false;
    }
}
$('#if').append(someText);
</script>

此代码重复15k次,只添加&#34; foo&#34;前10k次。

执行此类代码的时间可能介于0.10和0.12秒之间

<强>结论

只有在需要时才向字符串添加内容似乎是性能方面更好的选择。 此外,就代码可读性而言,应使用第二个选项。

答案 1 :(得分:0)

快速简单的分析:

  • 第一个选项进行比较和重新分配内存。
  • 第二个选项(假设您正在进行label = label.substring(...))计算字符数,如果您想要第一个 N 字符,String.prototype.substring()将<在读取 N 字符字符时,em>可能计算 N 次。最后,分配/重新分配内存。

现在哪种策略效率更高?

如果您仍有疑问,请在计时器下尝试这两种方法。