簡體   English   中英

JavaScript中解析文件中大量數據的最有效方法是什么

[英]What is the most efficient way in JavaScript to parse huge amounts of data from a file

JavaScript中解析文件中大量數據的最有效方法是什么?

目前我使用JSON解析來序列化未壓縮的250MB文件,這非常慢。 是否有一種簡單而快速的方法可以從文件中讀取JavaScript中的大量數據而無需遍歷每個字符? 存儲在文件中的數據只是幾個浮點數組?

更新:該文件包含一個3d網格,6個緩沖區(vert,uv等)。 緩沖區也需要表示為類型化數組。 流不是一個選項,因為在圖形引擎可以繼續之前必須完全加載文件。 也許更好的問題是如何以最有效的方式將巨大的類型數組從文件傳輸到javascript。

我會為這種JavaScript或流解析器推薦一個基於SAX的解析器。

DOM解析會將整個內容加載到內存中,這不是您提到的大文件的方法。

For Javascript based SAX Parsing (in XML)您可以參考https://code.google.com/p/jssaxparser/

for JSON您可以自己編寫,以下鏈接演示了如何在Javascript中編寫基於SAX的基本解析器http://ajaxian.com/archives/javascript-sax-based-parser

沒有一個非常好的方法可以做到這一點,因為整個文件將被加載到內存中,我們都知道它們都有很大的內存泄漏。 您是否可以不添加一些分頁來查看該文件的內容?

檢查是否有任何插件允許您將文件作為流讀取,這將大大改善這一點。

UPDATE

http://www.html5rocks.com/en/tutorials/file/dndfiles/

您可能想要閱讀有關讀取本地文件的新HTML5 API。 您將遇到下載250mb數據的問題。

我可以想到1個解決方案和1個黑客

解決方案:擴展分塊數據:它歸結為http協議。 關於http對於大多數客戶端 - 服務器場景具有足夠“語言”這一概念的REST部分。

您可以在客戶端上設置請求標頭Content-len,以確定每個請求需要多少數據

然后在后端有一些選項http://httpstatus.es

  • 如果服務器根本無法從數據庫中獲取那么多數據,則回復413
  • 417如果服務器能夠回復但不在請求的標題下(Content-len)
  • 206提供的塊,讓客戶知道“從那里來的更多”

HACK:使用Websocket並獲取二進制文件。 然后使用html5 FileAPI將其加載到內存中。 這可能會失敗,因為它不是導致問題的下載,而是解析幾乎無窮無盡的JS對象

你在瀏覽器上運氣不好。 你不僅需要下載文件,而且無論如何你都必須解析json。 在服務器上解析它,將其分解為更小的塊,將數據存儲到數據庫中,並查詢所需內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM