首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -将数组部分复制到另一个部分的最快方法

Javascript -将数组部分复制到另一个部分的最快方法
EN

Stack Overflow用户
提问于 2009-09-19 16:55:27
回答 7查看 7K关注 0票数 3

我需要快速地将数组的一部分复制到另一个数组中,替换它的旧值。

  • 不需要范围检查。
  • 要复制的项目数: 16384
  • 数组只包含整数。

基准代码:http://codebase.es/test/copytest.htm

这是我的方法:

代码语言:javascript
复制
  var i = 0x4000>>5; // loops count
  var j = 0x4000;    // write start index
  var k = 0x8000;    // read start index
  while (i--) {      // loop unrolling
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];    
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];
    //8
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];    
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];
    //16
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];    
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];
    //24
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];    
    dst[j++]=src[k++]; dst[j++]=src[k++];
    dst[j++]=src[k++]; dst[j++]=src[k++];
    //32
  }    

这能做得更快吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-19 17:51:10

您可以继续展开循环,以获得更小的性能提升,但这似乎与您将要获得的速度一样快。正如Gumbo在评论中所指出的,尝试使用预增量而不是后置增量:

代码语言:javascript
复制
var i = 0x4000>>5 + 1; // loops count
var j = 0x4000 - 1;    // write start index
var k = 0x8000 - 1;    // read start index
while (--i) {      // loop unrolling
    dst[++j]=src[++k]; dst[++j]=src[++k];
    dst[++j]=src[++k]; dst[++j]=src[++k];    
    dst[++j]=src[++k]; dst[++j]=src[++k];
    dst[++j]=src[++k]; dst[++j]=src[++k];
    //8
    ...
票数 2
EN

Stack Overflow用户

发布于 2009-09-19 17:03:26

我不确定你的方法比这更快:

代码语言:javascript
复制
var i = 0x4000;     // loops count
var j = 0x4000;    // write start index
var k = 0x8000;    // read start index
while (i--) {      // loop unrolling
  dst[j++]=src[k++];
}
票数 3
EN

Stack Overflow用户

发布于 2009-09-19 17:06:48

我会考虑切片法:

代码语言:javascript
复制
var dst = src.slice(start,end)

性能取决于javascript引擎的实现,但想必所有浏览器都已经在其平台上尽可能高效地实现了。

请参阅更多这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1448943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档