今天测试字符号串合并,想看看哪个快,在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>