2014-02-17 37 views
0

當以JSON或XML格式從Web服務器向瀏覽器傳輸大量柱狀數據時,對於每一行都會不必要地重複列名。我必須轉移的基本上是CSV格式 - 即。多行數據,每一行具有相同的字段順序。比XML和JSON更高帶寬效率的數據格式?

例如,XML,我會轉移:

<row> 
    <name>Frank</name> 
    <city>New York</city> 
</row> 
<row> 
    <name>Brian</name> 
    <city>Jerusalem</city> 
</row> 
etc.. 

同樣的,JSON,是不必要的重複字段名,成爲了很多沒有理由額外的字節。

我的問題是,有沒有其他標準格式,由Javascript和/或.NET庫支持,我可以使用它來更有效地傳輸這種「類CSV」數據集?

+0

那麼,爲什麼不使用CSV?您也可以將您的服務器設置爲gzip數據,這可能會節省大部分帶寬。 –

+2

這個問題爲什麼這麼寬泛?嘗試在服務器和客戶端之間節省帶寬時,可用的選項數量非常有限;所以有限的答案。 –

+0

如果有人可以投票結束這個問題,爲什麼其他人不能投票重新打開它? – Lewis

回答

1

除非你在談論大量的數據,否則它可能無關緊要(帶寬很便宜,或者我聽到)。但是,如果您試圖將盡可能多的數據壓縮到可用帶寬中,則您可以選擇。

你可以使用任何你想要的格式(XML,JSON),然後壓縮它。例如,您可以使用JSZip。優點:你不必改變你的基本數據結構。

此外,沒有什麼可以阻止您使用CSV,如果這是最適合您的應用程序的格式。最好使用庫如jquery-csv來處理像正確引用字符串的煩惱。缺點:這不是真正的壓縮;只是一種沒有太多開銷的格式。

所有的事情告訴我,我可能會採取第一種方法。

0

我猜你的JSON格式是如下圖所示:

[ 
    { 
    "name": "Frank", 
    "city": "New York" 
    }, 
    { 
    "name": "Brian", 
    "city": "Jerusalem" 
    } 
] 

爲什麼不能簡單地將其更改爲:

[ 
    ["name", "city"], 
    ["Frank", "New York"], 
    ["Brian", "Jerusalem"] 
] 
0

我不得不通過XML從閃存傳輸大量數據時,類似的問題(運行在客戶端,類似於JavaScript)和.NET(顯然在服務器上運行)

我最終使用的方法是;

XML > string without whitespace > zip compress > base64 encoded 

然後在另一邊,做相反的事。

就你而言,你可能會做;

CSV > string > zip > base64 

從內存中,我能得到一些真正的大載荷(約2MB)下降到不到50KB

+0

只是爲了添加,我選擇了zlib壓縮,因爲我能夠使用客戶端(Flash)和服務器端(.NET)。我相信zlib在JavaScript中可用,作爲一個lib。 –

+0

非常感謝,不知道基於JS的解壓縮。但是,爲什麼base64編碼 - 不只是增加了更多的傳輸量? –

+0

是的,增加了更多的批量,但它確保您的數據是純文本,否則它將是二進制。從來沒有能夠得到二進制工作,也壓縮後,我保存了這麼多的數據,base64編碼增加相對較少,特別是通過提琴手調試的額外好處。但是,如果你可以用二進制來做到這一點,那就用二進制來做 - 它更好。 –