2010-10-15 65 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兆數據。如果您要下載到客戶端的設備,請將其轉換爲他們期望的格式,並將其鏈接到該設備。然後他們可以自行下載並處理它們。