簡體   English   中英

從中間件返回文件數據時,為什么 ReadableStream 比 Buffer 更可取?

[英]Why is ReadableStream preferable to Buffer when returning file data from a middleware?

我有一個中間件,它讀取multipart/form-data並返回提交到請求正文的所有文件。 我使用busboy處理輸入並將文件內容作為緩沖區返回。 我讀到緩沖區會消耗大量 memory ,因此ReadableStream是更好的選擇。 我不明白為什么會這樣:即使是 stream 也必須將所有基礎數​​據存儲在 memory 的某個位置,對吧? 那么這怎么能比直接訪問緩沖區本身更好呢?

是的。 它確實存儲了一些數據,但只是其中的一小部分。 假設您想在某處上傳文件。 使用緩沖區,您可能必須讀取 1GB 文件,然后一次上傳整個文件。 如果您沒有 1GB 的 memory 可用,或者如果您同時上傳多個文件,您將簡單地用完 memory。 使用流,您可以在讀取數據時對其進行處理。 所以你加載了 1B 的數據,你上傳它,你釋放你的 memory,你加載另一個字節,你上傳等等。

如果您正在構建一個服務器應用程序,那么這個想法是相同的。 您開始在服務器上接收文件,並且可以在客戶端設法上傳整個內容之前開始處理您擁有的任何數據。 TCP 以這樣一種方式構建,即客戶端根本無法以比您處理它的速度更快的速度上傳內容。 您的 memory 中絕不會有整個文件。

暫無
暫無

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

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