影片與字幕·直接媒體下載器
大型媒體下載在瀏覽器記憶體中的容量:串流、Blob 和限制
· 工作原理
下載 效能 瀏覽器
ToolAcre 表示大小限制是裝置的記憶體而不是上傳上限。這篇文章解釋了這對於直接下載意味著什麼:如何讀取回應正文、位元組所在的位置以及瀏覽器標籤何時耗盡空間。
檔案有幾G,下載中途停止-記憶體限制導致瀏覽器端下載的問題
長記錄可以穩定地進行然後停止,因為瀏覽器端保存需要空間來容納接收到的區塊和完成的 Blob。僅憑停滯百分比無法診斷原因:網路可以暫停,主機可以關閉連接,取消可以觸發,或者進程可以接近記憶體壓力。
ToolAcre 使一個邊界具有確定性。 `downloadMedia` 預設最大為 2 GiB,並在讀取正文之前拒絕更大的宣告內容長度。如果主機省略或低估了該標頭,則當區塊到達時會再次強制執行相同的限制,從而防止出現無界累加器。接近邊界的宣告值需要謹慎,因為 Blob 組件、頁面狀態和實作開銷可能需要比響應有效負載單獨建議的資源更多的資源。
如何讀取回應正文:ReadableStream 區塊與一個大緩衝區 — 當進度緩慢時瀏覽器正在做什麼
Fetch 將回應正文公開為 ReadableStream。此實作取得一個讀取器,等待區塊,對每個 `Uint8Array` 進行計數,更新進度,並儲存用於最終 Blob 建構的區塊。串流媒體使進度和取消變得真實;它不會使儲存保持不變。
當 Content-Length 為正有限值時,介面可以顯示接收到的位元組數與總數的比值。如果沒有它,顯示器會報告接收到的位元組,但拒絕發明百分比。如果不存在可讀主體,程式碼將回退到 `response.blob()` 並僅報告最終大小。每個保留的區塊都使以後的組裝成為可能,而真正的磁碟流設計將需要不同的瀏覽器 API、權限模型和此處不存在的故障策略。
已完成的 Blob 所在的位置以及為什麼沒有瀏覽器儲存承諾是安全的
收集的 Blob 是一個瀏覽器對象,表示帶有 MIME 標籤的不可變位元組。此規範不承諾特定瀏覽器是否將每個支援位元組保留在 RAM 中、是否會溢出某些資料或在彙編期間複製緩衝區。因此,文章指南應避免通用儲存位置宣告。
應用程式確實證明了它會保留區塊引用直到流完成,然後建構一個 Blob 並使其可用於「保存到裝置」操作。此工作集與頁面和其他標籤競爭,因此裝置和瀏覽器條件仍然低於明確上限的實際限制。這種區別就是為什麼檔案會提到資源壓力,而不是承諾特定的 RAM 乘數、磁碟溢出閾值或依賴瀏覽器的分配技術。
為什麼沒有上傳上限,但有 2 GiB 下載防護
沒有檔案上傳到 ToolAcre,也沒有中繼接收媒體。 GET 從訪客的瀏覽器傳輸到提供的主機。這消除了伺服器上傳配額,但並不意味著「無限制」:來源強制執行最大為 2 GB 的限制,並告訴較大的作業使用本機「儲存」連結。
主機可以透過 Content-Length 宣告過大的大小,從而允許提前拒絕。它還可以在沒有長度的情況下進行串流傳輸,在這種情況下,ToolAcre 會對實際區塊進行計數,並在超過限制後停止。在此失敗後,部分位元組不會作為截斷的下載提供。早期和流式檢查涵蓋真實和缺失的長度標頭,而僅當測量的主體通過相同的上限時才會捕獲不準確的小標頭。
工作範例:在 RAM 有限的筆記型電腦上錄製長篇講座 — 會發生什麼以及如何判斷網路停滯帶來的記憶體壓力
想像筆記型電腦上的一個講座檔案已經執行了一個編輯器和許多分頁。首先按檢查連結並將規定的尺寸與防護罩進行比較。在下載期間,穩定的位元組更新沒有總數意味著主機遺漏了可用長度;凍結的請求行可能會顯示傳輸暫停。
即使請求保持活動狀態,記憶體壓力也會影響分頁,但 ToolAcre 無法檢查作業系統並宣告原因。瀏覽器任務工具、系統記憶體視圖和請求時間軸提供了補充證據。盲目重試可能會重複相同的分配需求。如果請求以 HTTP 狀態終止,請先調查該回應;對於每個中斷的大型傳輸來說,記憶體壓力並不是一個有用的預設解釋。
實用習慣:關閉其他分頁並一次下載一個檔案 - 如何為分頁提供所需的空間
在開始接近限制的傳輸之前關閉不相關的繁重分頁,一次保持一項大型作業處於活動狀態,並避免在儲存作業開始之前清除結果。這些習慣會減少競爭,但不會提高編碼最大值或保證在受限裝置上取得成功。
當主機提供內容長度時,首先檢查很有用,但缺失值意味著“未知”,而不是“小”。觀察原始位元組計數器,如果傳輸不是預期資產,則取消。取消會丟棄部分檔案並釋放讀取器鎖,而不是顯示不完整的位元組作為成功。及時保存還可以減少就緒 Blob 在頁面狀態下保持可達狀態的時間,儘管 JavaScript 無法保證瀏覽器回收後備儲存的確切時間。
這不包括什麼 - 恢復損壞的下載、將檔案分割成多個部分或超出裝置容量的下載
此路徑不會發出範圍請求、恢復中斷的傳輸、將輸出拆分為多個部分、直接串流傳輸到使用者選擇的檔案句柄或安排佇列。儘管 HEAD 回應報告位元組範圍是否受支持,但下載程式不會將該建議結果轉換為復原行為。
超出保護範圍的檔案屬於本機瀏覽器下載、允許的命令列用戶端或其他授權的工作流程,該工作流程逐步寫入而不保留 Blob 保存的整個結果。此選擇與記憶體架構有關,而不是登入、CORS、DRM 或權限限制的解決方法。可恢復的客戶端可能更適合不可靠的連接,但前提是檔案來源和授權允許該客戶端存取相同的資源。
重點:明確保護和可用裝置記憶體都很重要
準確的限制宣告有兩層:預設情況下,ToolAcre 拒絕超過 2 GiB,較小的傳輸仍然會受到瀏覽器可用資源的限制。 「無上傳上限」描述的是缺少中繼;它不是無限可下載大小的同義詞。
對於適當的檔案,區塊讀取器提供真實的進度,AbortController 提供取消,Blob 建立提供可保存的結果。直接媒體下載器在直接主機到瀏覽器路由上保留字節,同時確認瀏覽器標籤是有界工作區。應在傳輸開始之前一起規劃這兩個限制,尤其是在可用資源可能快速變化的託管筆記型電腦或行動裝置上。