js中数组合并字符串最快

406 阅读1分钟

今天测试字符号串合并,想看看哪个快,在node ts-node 浏览器结果基本都一致

空代表空循环没有任何执行一千万次

下面的运行记录都是一千万次添加1

  • node v17.6.0
空: 4.868ms
+=: 901.094ms
+: 1.079s
array: 395.997ms
arrayjoin: 394.535ms
  • ts-node v10.6.0
空: 4.868ms
+=: 901.094ms
+: 1.079s
array: 395.997ms
arrayjoin: 394.535ms
  • 浏览器
空: 4.3388671875 ms
+=: 488.756103515625 ms
+: 570.593994140625 ms
array: 371.423095703125 ms
arrayjoin: 356.110107421875 ms

但是n=100次时(n 是循环执行的次数) ts-node 情况

空: 0.047ms
+=: 0.011ms
+: 0.01ms
array: 0.02ms
arrayjoin: 0.074ms

+执行比其他都快

万次时几个性能都平横

结论:效率最快还是数组,之前弄错以为concat最快

源码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script src="./node_modules/%40wormery/wtsc/dist/wtsc.iife.js"></script>
    <script type="module">
      function empty() {
        console.time("空");
        for (let i = 0; i < 10000000; i++) {}
        console.timeEnd("空");
      }
      function plusEquals() {
        console.time("+=");
        let s = "";
        for (let i = 0; i < 10000000; i++) {
          s += "1";
        }
        console.timeEnd("+=");
      }

      function plus() {
        console.time("+");
        let s = "";
        for (let i = 0; i < 10000000; i++) {
          s = s + "1";
        }
        console.timeEnd("+");
      }

      function array() {
        console.time("array");
        let s = [];
        for (let i = 0; i < 10000000; i++) {
          s.push("1");
        }
        const str = new String(s);
        console.timeEnd("array");
      }

      function arrayjoin() {
        console.time("arrayjoin");
        let s = [];
        for (let i = 0; i < 10000000; i++) {
          s.push("1");
        }
        const str = s.join();
        console.timeEnd("arrayjoin");
      }

      function concat() {
        console.time("concat");
        let s = "";
        for (let i = 0; i < 10000000; i++) {
          s.concat("1");
        }
        console.timeEnd("concat");
      }

      empty();
      plusEquals();
      plus();
      array();
      arrayjoin();
      concat();
    </script>
    <style></style>
  </body>
</html>