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