2010-10-15 62 views
0

我正在使用这一点的代码,以便将一些大的ajax responseText格式化为好的二进制数据。它工作,虽然很慢。可以循环展开还是duff帮助这种情况?

我正在使用的数据可能大到8-10 megs。

我需要得到这个代码是绝对有效的。如何将循环展开或Duff的设备应用于此代码,同时仍然保持我的二进制数据完好无损,或者是否有人看到任何可以改变的东西来提高速度?

var ff = []; 
var mx = text.length; 
var scc= String.fromCharCode; 
for (var z = 0; z < mx; z++) { 
    ff[z] = scc(text.charCodeAt(z) & 255); 
} 
var b = ff.join(""); 
this.fp=b; 
return b; 

由于 专利

+0

你很惊讶,处理8-10MB,逐字节,在JavaScript中缓慢?我们在这里说话有多慢?另请参见:[为什么array.push有时比数组\ [n \] =值更快](http://stackoverflow.com/questions/614126/why-is-array-push-sometimes-faster-than- arrayn-value) – Shog9 2010-10-15 16:25:28

回答

1

你的时间猪不是循环。这是:ff[z] = scc(text.charCodeAt(z) & 255);你增量增长ff?这将是一头猪,保证。

如果你只是在调试器下运行它并暂停它,我敢打赌你会在增长的过程中看到它ff。预分配。

+0

这并不是说没有什么区别,但我相信它会有很大的区别......或者是改进。*如果你有测试,那么你应该发布它们。 – Shog9 2010-10-15 16:30:49

+0

@ Shog9:或许'push'是添加元素的最佳方式。无论如何,我怀疑'for'循环并不是时间的推移。 – 2010-10-15 17:11:19

+0

@Mike:我同意你WRT循环位不是一个很大的因素。不同浏览器(甚至浏览器版本之间)的数组性能差别很大,字符串连接与array.join()的相对性能也如此。我希望看到来自OP的更多信息,包括他在哪里运行,以及它为他运行的速度有多慢 - 我相当怀疑他可以通过切换到正则表达式(本机代码)来显着改善问题*。 – Shog9 2010-10-15 17:55:32

0

将数据转换为服务器上的JSON阵列。即使使用本地JSON引擎,8/10兆字节也需要很长时间。我不知道为什么JS应用程序需要8/10兆数据。如果您要下载到客户端的设备,请将其转换为他们期望的格式,并将其链接到该设备。然后他们可以自行下载并处理它们。