最近在使用node.js做服务器相关的工作,恰好遇到数组Array的复制问题:填充一段buffer,buffer的头3位根据目前的设计是固定的。用伪码表示:
var copyed = source.deepcopy
copyed.push()
Javascript中提供的方法
经过查询文档,发现有以下几种方法:
source.slice()//1
Array.from(source)//2
source.concat()//3
[...source]//4
那么自然产生一个问题,哪一种省时?接下来,就进行测试。
测试
因为测试的问题比较简单,没有考虑是否多核等因素,只是根据业务需要进行了两种测试。一种只是数组Array的复制,另一种则是数组Array复制完后进行”写”操作。第一种测试的代码形如:
const a = [1,2,3];
var start = new Date().getTime();
console.log(start);
for (var i = 100000; i >= 0; i--) {
var b = a.slice();
//b.push('s');
};
var end = new Date().getTime();
console.log(end);
console.log(end - start);
测试结果:
method | i=10000 | i=100000 |
---|---|---|
slice | 20 | 35 |
from | 39 | 206 |
concat | 20 | 35 |
… | 27 | 48 |
另一种测试将上述注释的代码加上,结果如下:
method | i=10000 | i=100000 |
---|---|---|
slice | 45 | 260 |
from | 38 | 220 |
concat | 58 | 283 |
… | 25 | 50 |
从结果来看,两种前提的测试下from所需的时间最多。单纯复制数组,slice和concat消耗时间最少;复制完再添加元素的情况下,…语法表现最好。
Comments