楊__羊羊
2019-03-13 17:13:53
上傳財務賬單,前端在上傳文件的時候做了數據解析,將近30萬條,點擊上傳按鈕的時候需要將這30萬條數據傳給后端,現在在上傳的時候會報Message length exceeded maximum allowed length.,而且解析文件的時候瀏覽器非常卡,有什么好的解決方案么?onSelectOriginalFile(result) { this.notifySuccessParsing(); this.data = UploadDataParser.parseShipmentCheck(result);//數據轉換 } submit() {ReconciliationResource.import(this.data);//將數據傳給后端}
2 回答

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
很簡單,把解析的工作交給后端,前端把整個文件傳上去就行了。js不適合用來干CPU密集型的任務,你在前端用for
或while
去解析文件是非常燒CPU的,除非你用WebAssembly
(不過我也沒試過),而且這個過程還是同步的,所以你會覺得卡。
所以解決方案就是把文件傳給后端,后端用C或其它更合適的語言解析,然后再分頁傳回前端或干別的什么事。
一定要在前端燒客戶的CPU的話,可以考慮以下幾件事情:
改客戶端,不再使用普通的瀏覽器,改用
Electron
;嘗試
WebAssembly
解析文件;優化文件結構,加速解析,如果堅持使用普通瀏覽器做客戶端的話可以讓客戶先把文件轉成json格式(專門寫個工具什么的,我也不知道你們原始格式是啥),然后前端
JSON.parse
,不過如果文件太大的話也要parse很久。
另外信息太大無法一次性發送的問題我沒遇到過,不過應該不是什么很麻煩的事情,畢竟網盤傳大文件都沒問題,這個自行查閱吧hhh。我現在能想到的就是可以使用WebSocket
流式上傳。

森林海
TA貢獻2011條經驗 獲得超2個贊
javascript本身是單線程的,適合做IO操作,不適合做密集的計算工作;
不過把什么都放在后端做也不太靠譜,畢竟后端資源有限;
為了解決卡頓問題,可以試試worker
添加回答
舉報
0/150
提交
取消