2012-10-27 88 views
2

我使用第三方閃光燈組件(包裝用javascript)與我的web應用程序,從中我得到了這逗號分隔值和BASE64數據:高效的方式

獲取CSV字符串數組功能:

// Get the csv as array function 
var buff = $wnd.MyFlashComp.getData(); 
var strBuff = buff.toString(); 
var arr = strBuff.split(','); 

獲取的base64數據功能:

// Get the data as base64 function 
var buff64 = $wnd.MyFlashComp.getData64(); 

當我使用buff64和在HTML標籤插上爲base64 src數據時,DAT a在瀏覽器中正確呈現,即頁面仍然活潑。而且我沒有看到該頁面的任何性能問題。

但是,將csv作爲數組獲取的函數非常緩慢,並且使頁面掛起(如果不是滯後)。我從閃存中獲得的數據範圍從500KB到1MB(最大)。

有沒有一種方法來提高此代碼的性能?

+0

當你在這裏,你能修理我的引擎在我的車上嗎? ~~我們不知道這麼長時間,所以我們不能告訴你如何使它更有效率。 – jcolebrand

+0

因此,據我所知,主要問題是'分裂'?或者它是下載速度?另外,該CSV中有哪些數據?圖片?圖像是靜態的嗎?或者它們對於每個有效載荷都不同? – Joseph

+0

我認爲問題在於分割,因爲getData()只是從一個在客戶端進行一些數據收集的flash組件獲取數據。我沒有在代碼的這一點做任何類型的客戶端服務器 – xybrek

回答

3

假設主要問題是split,因爲您要拆分1MB數據,並且由於base64而使用符合HTML5的(或現代)瀏覽器,爲何不嘗試在web worker中進行拆分。


或者,如果沒有一個HTML5的瀏覽器,做一些手工異步循環(循環setTimeout有1ms的延遲)和字符串操作。通過在每次迭代時切斷字符串的逗號分隔部分來做到這一點,直到沒有剩餘部分。

setTimeout應該可以幫助您進行非阻塞操作,但我不知道用這種方法砍掉整個1MB需要多長時間。這不是真的「異步」。它只是每超時安排任務,以便操作不會阻止用戶界面。此外,每次迭代,您都可以爲進度條做一個「進度報告」,但檢查剩餘的1MB數量。

+0

這個解決方案聽起來很有效率,我會試試看。但是,如果用戶沒有HTML5瀏覽器,那麼卸載處理的選項是什麼? – xybrek

+0

@xybrek然後嘗試使用'setTimeout'做一個異步循環。 – Joseph