2010-04-26 22 views
5

我有一個簡單的數據存儲在服務器上,作爲一個普通的字符串。這有點荒謬,但它看起來像這樣:用javascript創建和解析大型字符串?

name|date|grade|description|name|date|grade|description|repeat for a long time 

這個字符串可以達到1.4MB的大小。這個想法是,它是一堆學生記錄,只是用一個簡單的管道分隔符串在一起。這是一個非常糟糕的序列化方法。

一旦這個龐大的字符串被推送到客戶端,它會再次沿着管道分割成學生記錄,使用JavaScript。

我一直在計算在客戶端創建和拆分這些字符串需要多長時間。時間實際上相當不錯,我在幾臺不同的機器上看到的最慢的運行時間爲10,000秒「學生記錄」爲0.2秒,最終字符串大小爲〜1.4mb。

我意識到這是非常奇怪的,只是想知道是否有任何使用JavaScript創建和分割這樣的大字符串的固有問題?我不知道不同的瀏覽器如何實現他們的JavaScript引擎。我在'主流'瀏覽器上試過這個,但不知道這些在每個版本的早期版本上會如何執行。

是啊,在尋找任何意見,這是更有趣的比任何其他!

感謝1.4MB數據

回答

1

字符串分割並不體面的機器出了問題,而不是你應該擔心你的用戶的互聯網連接速度。我試圖用800 kb字典(這是你數據的一半)進行拼寫檢查,主要問題是加載時間。

但看起來像你的學生記錄數據可以放在數據庫中,並且可能不需要在加載時加載所有內容。那麼,怎麼樣做一個分頁顯示用戶記錄或使用ajax來請求搜索某些用戶名?

+0

+1我看到的一個問題是依賴基於瀏覽器的JS實現。 – lexu 2010-04-26 05:51:31

1

如果它是一個真的大的字符串時,它可以支付與'string'.slice(from, to)連續切片串僅處理一個較小的子集,附加所有個別項目的輸出端與list.push()或類似的可能奏效的東西。

即使在IE中,字符串拆分方法可能是最有效的方法。使用string.charAt(x)處理單個字符的速度非常慢,並且通常會顯示安全錯誤,因爲它會停止瀏覽器。使用字符串拆分方法肯定比使用正則表達式分割要快得多。

也可以使用JSON數組對數據進行編碼,一些較新的瀏覽器(如IE8/Webkit/FF3.5)使用JSON.parse(data)內置快速JSON解析。但如果有足夠的數據,使用eval(JSON)可能會使瀏覽器溢出,所以可能是一個壞主意。雖然它可能會支付比較的表現。

在很多情況下,更好的方法是使用AJAX,並且只從服務器一次加載一些數據,這樣也可以節省下載時間。

1

除了S. Mark關於本地和x-fer速度的優秀評論以及使用AJAX重新編碼的提示,我建議在瀏覽器中遠離JavaScript(,假設它運行的是)到JS的非瀏覽器實現(或可能是另一種語言)。

基於瀏覽器的JS似乎是一個data-x-fer鏈中的一個星期鏈接,並且我不想監視運行,因爲瀏覽器會不時升級,並且破壞您的JS-x-fer可能是unanticipates副作用!