管理 HTML5 離線儲存空間

HTML5 推出了許多儲存 API,方便您在本機儲存大量資料的使用者的 。但是根據預設,分配給每個應用程式的空間限制為 MB。Google Chrome 可讓您要求更大的儲存空間配額,而不僅限於原定上限 5 MB。

本文件將介紹 Chrome 和 介紹了實驗性的 Quota Management API,可用於管理儲存空間配額。 本文假設您已熟悉用戶端儲存空間和用戶端儲存空間的 瞭解如何使用離線 API

目錄

  1. 儲存空間類型
    1. 暫時
    2. 永久
    3. 無限制
    4. 比較儲存空間類型
  2. 管理配額
    1. 查詢儲存空間使用情形和可用性
    2. 要求更多儲存空間
    3. 重設測試配額
  3. API 參考資料
    1. 常數
    2. 方法總覽
    3. 方法
  4. 未來發展

儲存空間類型

在 Google Chrome 中,你可以要求取得三種儲存空間類型:

以下各節將詳細說明這些儲存空間類型,並詳細說明 請參閱表格中的說明。

臨時儲存空間

臨時儲存空間是可供任何網頁應用程式使用的暫時性儲存空間,Chrome 會自動 因此您不必要求分配。

共用集區

在瀏覽器中執行的所有網頁應用程式會共用臨時儲存空間。 共用集區上限為 1/3 的可用磁碟空間。應用程式已使用的儲存空間為 包含在共用集區的計算中;這表示我們是根據 (available storage space + storage being used by apps) * .333

每個應用程式的共用集區最多可擁有 20% 的共用集區。舉例來說,如果可用的磁碟空間總容量為 60 GB 的共用集區為 20 GB,應用程式儲存空間上限為 4 GB。計算方式為 20% (最高 4 GB),共 1/3 的可用磁碟空間 (上限為 20 GB)。

要求釋出更多空間

雖然您可以查詢應用程式可用的儲存空間大小和容量 為您的應用程式儲存的資料,您無法要求更多暫存儲存空間。如果是應用程式 超過分配的配額,系統就會擲回錯誤。

儲存空間用盡

一旦超過整個集區的儲存空間配額,您儲存的整個資料至少 系統將刪除最近使用的主機。不過,瀏覽器不會清除本機儲存空間中的資料, SessionStorage。針對儲存在其他離線 API 中的資料,瀏覽器會刪除全部資料,而非 確保應用程式資料不會以預期方式損毀。

由於每個應用程式的儲存空間集區上限為 20%,因此只有在使用者刪除時,系統才會刪除應用程式 正在執行超過五個離線應用程式,每個應用程式都會佔用儲存空間上限。

不過,當使用者在硬碟中加入更多檔案時,可用儲存空間可能會縮小。當 可用的磁碟空間會相當有限 (請注意,共用集區只佔目前「目前」空間的一半 磁碟空間),瀏覽器會將為最少使用型主機儲存的所有資料刪除。

永久儲存空間

永久儲存空間是除非使用者清除,否則會保存在瀏覽器中。可用 僅適用於使用 File System API 的應用程式,但最終也會開放其他離線 API 使用 例如 IndexedDB 和應用程式快取

應用程式可以有比臨時儲存空間更大的配額,但您必須確定 透過 Quota Management API 要求儲存空間,而且使用者必須授予您相關權限,才能使用更多 空白鍵。Chrome 會顯示資訊列,提示使用者授予應用程式更多本機儲存空間。

無限儲存空間

無限儲存空間與永久儲存空間類似,但僅限 Chrome 應用程式和 副檔名 (.crx 檔案)。無限儲存空間的大小取決於可用空間。 寫入硬碟您可以在資訊清單檔案中要求 unlimitedStorage 權限 應用程式擴充功能。安裝時,系統會告知使用者 應用程式或擴充功能繼續安裝程序,即表示使用者將權限授予 列在 manifest.json 檔案的所有網頁。

詳情請參閱各應用程式擴充功能的開發人員指南。

比較儲存空間類型

下表說明三種儲存空間類型的差異。

 臨時儲存空間永久儲存空間無限儲存空間
基本說明

適用於所有網頁應用程式的暫時性儲存空間。

系統會自動提供,不必另外申請。

永久儲存空間,必須由使用者透過 Quota Management API 要求授予,並由使用者授予。

適用於 Chrome 擴充功能和應用程式的永久儲存空間。

已在資訊清單檔案中設定,且必須由使用者授予。

適用地區

所有網頁應用程式。

所有網頁應用程式。Chrome 擴充功能專屬功能,以及代管和安裝的網頁應用程式
權限無,不需明確要求即可使用。

請使用 Quota Management API 申請更多儲存空間。

您可以在資訊清單檔案中要求應用程式擴充功能unlimitedStorage 權限。
初次使用的使用者體驗不會向使用者顯示。應用程式只會執行。

Chrome 會顯示資訊列,提示使用者接受或拒絕儲存空間要求。

但是,如果您要求的配額數量實際上低於應用程式目前的分配範圍,系統就不會顯示提示。因為系統會保留較大的配額。

安裝時,系統會告知使用者應用程式或擴充功能要求的權限。如果繼續安裝,使用者將直接授予「app」或「擴充功能」資訊清單.json 檔案中所列網址的存取。

後續要求增加儲存空間時的使用者體驗不適用。您無法申請更多臨時儲存空間。

Chrome 會再次提示使用者。

 

無論應用程式或擴充功能提出的配額增加要求為何,Chrome 在安裝完成後都不會向使用者顯示提示。
資料持續性

暫時性。瀏覽器可以刪除資料。

持續性。除非使用者指示,否則瀏覽器不會刪除資料。資料可在後續的存取中取得。

因此,請勿假設資料會永久留存,因為使用者可以刪除資料。

與永久儲存空間相同。

 

預設儲存空間

最多 20% 共用集區。

0 MB。您必須明確要求取得特定的儲存空間。

0 MB。您必須在資訊清單檔案中明確要求 unlimitedStorage

如果您不指定儲存空間需求,Chrome 會從臨時儲存空間的共用集區為應用程式分配儲存空間。

儲存空間上限最多 20% 共用集區。硬碟的可用空間最大。沒有固定集區的儲存空間。硬碟的可用空間最大。
建議用途快取中。可離線運作或具備大量資產的應用程式。設計為在 Google Chrome 中執行的應用程式。
支援這個 API 的 API

離線 API

  • 應用程式快取
  • 檔案系統
  • IndexedDB
  • WebSQL (自 2010 年 11 月 18 日起已淘汰)

注意:LocalStorage 和 SessionStorage 等網路儲存空間 API 會維持在 5 MB 的固定狀態。

File System API

離線 API

  • 應用程式快取
  • 檔案系統
  • IndexedDB
  • WebSQL (已淘汰)

注意:LocalStorage 和 SessionStorage 等網路儲存空間 API 會維持在 5 MB 的固定狀態。

管理配額

使用 Chrome 13 所推出的 Quota Management API 可以進行下列作業:

這個 API 是使用全域物件 window.webkitStorageInfo 實作。

如需參考說明文件,請參閱下一節

查詢儲存空間用量和可用性

如要查詢目前使用的儲存空間大小,以及主機剩餘的可用空間,請呼叫 queryUsageAndQuota(),其中包含以下內容:

  • 您要查看的儲存空間類型
  • 成功回呼

API 回報的用量可能會與使用者資料的實際大小不同,因為每個儲存空間 可能會需要多餘的位元組來儲存中繼資料此外,狀態更新可能會延遲,導致 API 未反映最新儲存空間狀態。

下列程式碼片段說明如何詢問儲存空間相關問題:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

如要查詢永久儲存空間的狀態,只要將 webkitStorageInfo.PERSISTENT會員價 webkitStorageInfo.TEMPORARY。列舉也在 window 物件 (全域命名空間),因此您也可以使用 window.PERSISTENTwindow.TEMPORARY

要求增加儲存空間

系統會自動分配配額,因此您不需要詢問更多臨時儲存空間, 超過數量上限 (如表格所述)。

對於 File System API 的永久儲存空間,預設配額為 0,因此您必須明確要求 要求儲存空間使用以下內容呼叫 requestQuota()

  • 儲存空間類型
  • 大小
  • 成功回呼

視您提出要求的情況而定,會發生以下情況:

  • 如果您要求更高的配額,瀏覽器會顯示資訊列並提示使用者 授予或拒絕提高配額的權限。在某些情況下,請求可能會自動顯示,但不顯示通知訊息。 並傳回目前的配額或較小的配額
  • 如果您要求的配額量低於應用程式目前的分配範圍,系統就不會顯示提示。
  • 如果你要求的儲存空間超過允許的上限,系統會顯示錯誤訊息 (QUOTA_EXCEEDED_ERR)。
  • 如果您在使用者已授予權限後再次呼叫 requestQuota(),系統不會執行任何動作。 因此,不要重複呼叫該方法。

以下說明如何要求更多儲存空間:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

正在重設測試配額

測試應用程式的儲存空間時,您可能會想清除儲存的資料,以便稍後 測試配額管理。方法如下:

  1. 在網址列中輸入 chrome://settings/cookies
  2. 搜尋您的應用程式。
  3. 選取應用程式。
  4. 在醒目顯示的所選項目右側,按一下「X」X

API 參考資料

本節說明 Quota Management API 的方法。

常數

以下是 webkitStorageInfo 常數,用於表示儲存空間類型。

常數說明
TEMPORARY0臨時儲存空間。
PERSISTENT1永久儲存空間。

方法總覽

queryUsageAndQuota
requestQuota

方法

queryUsageAndQuota

檢查目前的儲存空間大小,以及主機剩餘的可用空間。

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback:包含兩個參數的選用回呼:

    • 應用程式目前使用的位元組數。
    • 配額中剩餘的位元組數。
  • errorCallback:選填的錯誤回呼。

requestQuota

要求更多儲存空間。瀏覽器會顯示資訊列,提示使用者授予或拒絕應用程式 以便取得更多儲存空間

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
參數
  • newQuotaInBytes:所需的儲存空間配額位元組數。
  • successCallback:非必要的回呼,可傳遞授予的位元組數。
  • errorCallback:選填的錯誤回呼。

未來發展

這項計畫是將所有 HTML5 離線儲存空間 API,包括 IndexedDB、應用程式快取、檔案 在「配額」下可指定的系統和其他 API Management API您將能管理此平台的所有儲存空間分配。