Skip to content

一种字符串拼接的高效方法

比较一下下面几种字符串拼接的方法:

js
// prepare a long array
const arr = [];
for (let i = 0; i < 10000; i++) {
  arr.push("item" + i);
}

function testByForLoop1() {
  const tsStart = +new Date().valueOf();
  let html = "<ul>";
  for (let i = 0, len = arr.length; i < len; i++) {
    html += `<li>${arr[i]}</li>`;
  }
  html += "</ul>";
  console.log("testByForLoop1: " + (+new Date().valueOf() - tsStart));
}

function testByForLoop2() {
  const tsStart = +new Date().valueOf();
  let html = "<ul>";
  for (let i = 0, len = arr.length; i < len; i++) {
    html += "<li>" + arr[i] + "</li>";
  }
  html += "</ul>";
  console.log("testByForLoop2: " + (+new Date().valueOf() - tsStart));
}

function testByArrayJoinMethod() {
  const tsStart = +new Date().valueOf();
  let html = "<ul><li>";
  html += arr.join("</li><li>");
  html += "</li></ul>";
  console.log("testByArrayJoinMethod: " + (+new Date().valueOf() - tsStart));
}

testByForLoop1();
testByForLoop2();
testByArrayJoinMethod();

经过在Chrome浏览器多次尝试,总的来说,testByForLoop1方法(用了ES6字符串模板的for循环)耗时最长,testByForLoop2方法(没用ES6字符串模板的for循环)耗时其次,testByArrayJoinMethod方法(利用了数组的join方法)耗时最短,它们的耗时在数组长度越长时越是差异显著。尤其是testByArrayJoinMethod方法简直是效果拔群。下面是一个截图(截图里有个地方</ul></ul>是当时写错了,上面的代码里以纠正,截图就不换了。。): 处理小数据时怎么方便怎么来,因为在这种情况下可以认为上面三种方法的耗时是一样的,但是如果要处理很长的数据的话,能用数据join方法实现的话,效果不是一般的好。

天上的神明与星辰,人间的艺术和真纯,我们所敬畏和热爱的,莫过于此。