前端下載超大文件的完整方案
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
本文從前端方面出發(fā)實現瀏覽器下載大文件的功能。不考慮網絡異常、關閉網頁等原因造成傳輸中斷的情況。分片下載采用串行方式(并行下載需要對切片計算hash,比對hash,丟失重傳,合并chunks的時候需要按順序合并等,很麻煩。對傳輸速度有追求的,并且在帶寬允許的情況下可以做并行分片下載)。
實現步驟
以下是一個基本的前端大文件下載的實現示例: 可以在類里面增加注入一個回調函數,用來更新外部的一些狀態(tài),示例中只展示下載完成后的回調
分片下載怎么實現斷點續(xù)傳?已下載的文件怎么存儲?瀏覽器的安全策略禁止網頁(JS)直接訪問和操作用戶計算機上的文件系統(tǒng)。 在分片下載過程中,每個下載的文件塊(chunk)都需要在客戶端進行緩存或存儲,方便實現斷點續(xù)傳功能,同時也方便后續(xù)將這些文件塊合并成完整的文件。這些文件塊可以暫時保存在內存中或者存儲在客戶端的本地存儲(如 IndexedDB、LocalStorage 等)中。 一般情況下,為了避免占用過多的內存,推薦將文件塊暫時保存在客戶端的本地存儲中。這樣可以確保在下載大文件時不會因為內存占用過多而導致性能問題。 在上面提供的示例代碼中,文件塊是暫時保存在一個數組中的,最終在 IndexedDB本地存儲IndexedDB文檔:IndexedDB_API
IndexedDB 數據實際上存儲在瀏覽器的文件系統(tǒng)中,是瀏覽器的隱私目錄之一,不同瀏覽器可能會有不同的存儲位置,普通用戶無法直接訪問和手動刪除這些文件,因為它們受到瀏覽器的安全限制??梢允褂?nbsp; 原生的indexedDB api 使用起來很麻煩,稍不留神就會出現各種問題,封裝一下方便以后使用。 這個類封裝了 IndexedDB 的常用操作,包括打開數據庫、添加數據、通過 ID 獲取數據、獲取全部數據、更新數據、刪除數據和刪除數據表。 封裝indexedDB類
使用indexedDB類示例:
indexedDB的使用庫 - localforage這個庫對瀏覽器本地存儲的幾種方式做了封裝,自動降級處理。但是使用indexedDB上感覺不是很好,不可以添加索引,但是操作確實方便了很多。 文檔地址: localforage 下面展示 LocalForage 中使用 IndexedDB 存儲引擎并結合
現代的瀏覽器會自動管理 IndexedDB 連接的生命周期,包括在頁面關閉時自動關閉連接,在大多數情況下,不需要顯式地打開或關閉 IndexedDB 連接。 如果你有特殊的需求或者對性能有更高的要求,可以使用 使用 LocalForage 來刪除 IndexedDB 中的所有數據
IndexedDB內存暫用過高問題使用 IndexedDB 可能會導致瀏覽器內存占用增加的原因有很多,以下是一些可能的原因:
為了減少內存占用,你可以考慮優(yōu)化數據存儲結構、合理使用索引、避免長時間保持大型數據集等措施。另外,使用瀏覽器的開發(fā)者工具進行內存分析,可以幫助你找到內存占用增加的具體原因,從而采取相應的優(yōu)化措施。 本文來自博客園,作者:甜點cc,轉載請注明原文鏈接:https://www.cnblogs.com/all-smile/p/18096224 該文章在 2024/4/30 9:39:18 編輯過 |
關鍵字查詢
相關文章
正在查詢... |