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