国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
關(guān)鍵要點(diǎn)
數(shù)據(jù)持久性
JavaScript變量
DOM節(jié)點(diǎn)存儲
Web存儲 (localStorage 和 sessionStorage)
IndexedDB
緩存API
5.5 AppCache
文件系統(tǒng)訪問API
文件和目錄條目API
cookie
window.name
WebSQL
仔細(xì)檢查存儲
存儲大雜燴
關(guān)于本地存儲替代方案的常見問題
我可以用什么代替本地存儲?
什么時候不應(yīng)該使用本地存儲?
localStorage和sessionStorage哪個更好?
什么是客戶端數(shù)據(jù)庫?
客戶端存儲有哪些不同類型?
首頁 科技周邊 IT業(yè)界 10個客戶端存儲選項(xiàng)以及何時使用它們

10個客戶端存儲選項(xiàng)以及何時使用它們

Feb 10, 2025 pm 02:22 PM

10 Client-side Storage Options and When to Use Them

瀏覽器數(shù)據(jù)存儲與操作,也稱為客戶端存儲,在無需或無法將數(shù)據(jù)發(fā)送到Web服務(wù)器時非常有用。

瀏覽器數(shù)據(jù)存儲和操作的場景包括:

  • 保持客戶端應(yīng)用程序的狀態(tài)——例如當(dāng)前屏幕、輸入的數(shù)據(jù)、用戶偏好等。
  • 訪問本地數(shù)據(jù)或文件且具有嚴(yán)格隱私要求的實(shí)用程序。
  • 可離線工作的漸進(jìn)式Web應(yīng)用程序 (PWA)。

以下是十種瀏覽器數(shù)據(jù)存儲選項(xiàng):

  1. JavaScript變量
  2. DOM節(jié)點(diǎn)存儲
  3. Web存儲 (localStorage 和 sessionStorage)
  4. IndexedDB
  5. 緩存API(不要使用AppCache?。?/li>
  6. 文件系統(tǒng)訪問API
  7. 文件和目錄條目API
  8. cookie
  9. window.name
  10. WebSQL

本文將探討這十種不同的瀏覽器數(shù)據(jù)存儲方式,涵蓋它們的限制、優(yōu)缺點(diǎn)以及每種技術(shù)的最佳用途。

在瀏覽這些選項(xiàng)之前,先快速了解一下數(shù)據(jù)持久性……

關(guān)鍵要點(diǎn)

  • JavaScript變量:臨時數(shù)據(jù)最快,但在頁面刷新時會被清除;最適合不需要持久保存超過當(dāng)前頁面查看的數(shù)據(jù)。
  • DOM節(jié)點(diǎn)存儲:在速度和持久性方面與JavaScript變量類似,但允許在HTML元素中存儲狀態(tài);用于組件特定狀態(tài)。
  • Web存儲 (localStorage 和 sessionStorage):適合持久存儲少量數(shù)據(jù) (localStorage) 或按會話存儲數(shù)據(jù) (sessionStorage);由于同步操作,不適合大型數(shù)據(jù)集。
  • IndexedDB:最適合需要持久保存的大量結(jié)構(gòu)化數(shù)據(jù);支持事務(wù)和索引,但API復(fù)雜。
  • 緩存API:理想情況下,用于在PWA中存儲網(wǎng)絡(luò)響應(yīng)以供離線使用;現(xiàn)代API,但僅限于網(wǎng)絡(luò)數(shù)據(jù),不適合通用狀態(tài)存儲。
  • cookie:對于必須與HTTP請求一起發(fā)送的小型數(shù)據(jù)很有用;具有良好的持久性,但容量有限且可能存在安全問題。

數(shù)據(jù)持久性

通常,您存儲的數(shù)據(jù)將是:

  1. 持久性:它會一直保留,直到您的代碼選擇刪除它,或者
  2. 易失性:它會一直保留,直到瀏覽器會話結(jié)束,通常是在用戶關(guān)閉選項(xiàng)卡時。

實(shí)際情況更為細(xì)致。

持久性數(shù)據(jù)可能隨時被用戶、操作系統(tǒng)、瀏覽器或插件阻止或刪除。當(dāng)瀏覽器接近分配給該存儲類型的容量時,它可能會決定刪除較舊或較大的項(xiàng)目。

瀏覽器還會記錄頁面狀態(tài)。您可以從網(wǎng)站導(dǎo)航離開,然后單擊后退或關(guān)閉并重新打開選項(xiàng)卡;頁面應(yīng)該看起來相同。被視為僅限會話的變量和數(shù)據(jù)仍然可用。

  1. JavaScript變量

指標(biāo) 說明 容量沒有嚴(yán)格限制,但當(dāng)您填充內(nèi)存時,瀏覽器可能會變慢或崩潰讀取/寫入速度最快的選項(xiàng)持久性差:數(shù)據(jù)會被瀏覽器刷新清除在JavaScript變量中存儲狀態(tài)是最快速和最簡單的選項(xiàng)。我相信您不需要示例,但是……

const
  a = 1,
  b = 'two',
  state = {
    msg:  'Hello',
    name: 'Craig'
  };

優(yōu)點(diǎn):

  • 易于使用
  • 快速
  • 不需要序列化或反序列化

缺點(diǎn):

  • 易碎:刷新或關(guān)閉選項(xiàng)卡會清除所有內(nèi)容
  • 第三方腳本可以檢查或覆蓋全局(窗口)值

您已經(jīng)在使用變量了。您可以在頁面卸載時考慮永久存儲變量狀態(tài)。

  1. DOM節(jié)點(diǎn)存儲

指標(biāo)說明容量沒有嚴(yán)格限制,但不適合大量數(shù)據(jù)讀取/寫入速度快持久性差:數(shù)據(jù)可能被其他腳本或刷新清除大多數(shù)DOM元素(在頁面上或內(nèi)存中)都可以在命名屬性中存儲值。使用以data-為前綴的屬性名稱更安全:

  1. 屬性將永遠(yuǎn)不會具有關(guān)聯(lián)的HTML功能
  2. 您可以通過dataset屬性訪問值,而不是更長的.setAttribute()和.getAttribute()方法。

值存儲為字符串,因此可能需要序列化和反序列化。例如:

// 定位<main>元素
</main>const main = document.querySelector('main');

// 存儲值
main.dataset.value1 = 1;
main.dataset.state = JSON.stringify({ a:1, b:2 });

// 檢索值
console.log( main.dataset.value1 ); // "1"
console.log( JSON.parse(main.dataset.state).a ); // 1

優(yōu)點(diǎn):

  • 您可以在JavaScript或HTML中定義值——例如
  • 有助于存儲特定組件的狀態(tài)
  • DOM很快?。ㄅc流行的觀點(diǎn)相反)

缺點(diǎn):

  • 易碎:刷新或關(guān)閉選項(xiàng)卡會清除所有內(nèi)容(除非值是服務(wù)器渲染到HTML中的)
  • 僅限字符串:需要序列化和反序列化
  • 更大的DOM會影響性能
  • 第三方腳本可以檢查或覆蓋值

DOM節(jié)點(diǎn)存儲比變量慢。在將組件的狀態(tài)存儲在HTML中很實(shí)用的情況下,請謹(jǐn)慎使用它。

  1. Web存儲 (localStorage 和 sessionStorage)

指標(biāo)說明容量每個域5MB讀取/寫入速度同步操作:可能很慢持久性數(shù)據(jù)保留到被清除為止Web存儲提供兩個類似的API來定義名稱/值對。使用:

  1. window.localStorage存儲持久性數(shù)據(jù),以及
  2. window.sessionStorage在瀏覽器選項(xiàng)卡保持打開狀態(tài)時保留僅限會話的數(shù)據(jù)(但請參見數(shù)據(jù)持久性)

使用.setItem()存儲或更新命名項(xiàng):

localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));

使用.getItem()檢索它們:

const state = JSON.parse( localStorage.getItem('state') );

使用.removeItem()刪除它們:

localStorage.removeItem('state')

其他屬性和方法包括:

  • .length:存儲的項(xiàng)目數(shù)
  • .key(N):第N個鍵的名稱
  • .clear():刪除所有存儲的項(xiàng)目

更改任何值都會在連接到同一域的其他瀏覽器選項(xiàng)卡/窗口中引發(fā)存儲事件。您的應(yīng)用程序可以相應(yīng)地做出響應(yīng):

const
  a = 1,
  b = 'two',
  state = {
    msg:  'Hello',
    name: 'Craig'
  };

優(yōu)點(diǎn):

  • 簡單的名稱/值對API
  • 會話和持久性存儲選項(xiàng)
  • 良好的瀏覽器支持

缺點(diǎn):

  • 僅限字符串:需要序列化和反序列化
  • 沒有事務(wù)、索引或搜索的非結(jié)構(gòu)化數(shù)據(jù)
  • 同步訪問會影響大型數(shù)據(jù)集的性能

Web存儲非常適合更簡單、更小、臨時的值。它不太適合存儲大量結(jié)構(gòu)化信息,但是您可以通過在頁面卸載時寫入數(shù)據(jù)來避免性能問題。

  1. IndexedDB

指標(biāo)說明容量取決于設(shè)備。至少1GB,但最多可以達(dá)到剩余磁盤空間的60%讀取/寫入速度快持久性數(shù)據(jù)保留到被清除為止IndexedDB提供了一個類似NoSQL的低級API,用于存儲大量數(shù)據(jù)。該存儲可以被索引,可以使用事務(wù)更新,并可以使用異步方法搜索。

IndexedDB API 復(fù)雜,需要一些事件處理。以下函數(shù)在傳遞名稱、版本號和可選升級函數(shù)(在版本號更改時調(diào)用)時打開數(shù)據(jù)庫連接:

// 定位<main>元素
</main>const main = document.querySelector('main');

// 存儲值
main.dataset.value1 = 1;
main.dataset.state = JSON.stringify({ a:1, b:2 });

// 檢索值
console.log( main.dataset.value1 ); // "1"
console.log( JSON.parse(main.dataset.state).a ); // 1

以下代碼連接到myDB數(shù)據(jù)庫并初始化todo對象存儲(類似于SQL表或MongoDB集合)。然后它定義一個名為id的自動遞增鍵:

localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));

一旦db連接準(zhǔn)備就緒,您就可以在一個事務(wù)中.add新的數(shù)據(jù)項(xiàng):

const state = JSON.parse( localStorage.getItem('state') );

您可以檢索值,例如第一個項(xiàng)目:

localStorage.removeItem('state')

優(yōu)點(diǎn):

  • 具有最大空間的靈活數(shù)據(jù)存儲
  • 強(qiáng)大的事務(wù)、索引和搜索選項(xiàng)
  • 良好的瀏覽器支持

缺點(diǎn):

  • 一個復(fù)雜的基于回調(diào)和事件的API

IndexedDB是可靠存儲大量數(shù)據(jù)的最佳選擇,但是您需要使用一個包裝庫,例如idb、Dexie.js或JsStore。

  1. 緩存API

指標(biāo)說明容量取決于設(shè)備,但Safari將每個域限制為50MB讀取/寫入速度快持久性數(shù)據(jù)保留到被清除或在Safari中兩周后為止緩存API提供HTTP請求和響應(yīng)對象對的存儲。您可以創(chuàng)建任意數(shù)量的命名緩存來存儲任意數(shù)量的網(wǎng)絡(luò)數(shù)據(jù)項(xiàng)。

該API通常用于服務(wù)工作程序中,用于緩存漸進(jìn)式Web應(yīng)用程序的網(wǎng)絡(luò)響應(yīng)。當(dāng)設(shè)備斷開網(wǎng)絡(luò)連接時,可以重新提供緩存的資產(chǎn),以便Web應(yīng)用程序可以離線運(yùn)行。

以下代碼將網(wǎng)絡(luò)響應(yīng)存儲在名為myCache的緩存中:

const
  a = 1,
  b = 'two',
  state = {
    msg:  'Hello',
    name: 'Craig'
  };

類似的函數(shù)可以從緩存中檢索項(xiàng)目。在此示例中,它返回響應(yīng)正文文本:

// 定位<main>元素
</main>const main = document.querySelector('main');

// 存儲值
main.dataset.value1 = 1;
main.dataset.state = JSON.stringify({ a:1, b:2 });

// 檢索值
console.log( main.dataset.value1 ); // "1"
console.log( JSON.parse(main.dataset.state).a ); // 1

優(yōu)點(diǎn):

  • 存儲任何網(wǎng)絡(luò)響應(yīng)
  • 可以提高Web應(yīng)用程序的性能
  • 允許Web應(yīng)用程序離線運(yùn)行
  • 現(xiàn)代基于Promise的API

缺點(diǎn):

  • 不適合存儲應(yīng)用程序狀態(tài)
  • 可能在漸進(jìn)式Web應(yīng)用程序之外不太有用
  • Apple對PWA和緩存API并不友好

緩存API是存儲從網(wǎng)絡(luò)檢索的文件和數(shù)據(jù)的最佳選擇。您可能可以使用它來存儲應(yīng)用程序狀態(tài),但它并非為此目的而設(shè)計(jì),并且還有更好的選擇。

5.5 AppCache

AppCache是緩存API已失效的前身。這不是您要尋找的存儲解決方案。這里沒有什么好看的。請離開。

  1. 文件系統(tǒng)訪問API

指標(biāo)說明容量取決于剩余磁盤空間讀取/寫入速度取決于文件系統(tǒng)持久性數(shù)據(jù)保留到被清除為止文件系統(tǒng)訪問API允許瀏覽器讀取、寫入、修改和刪除本地文件系統(tǒng)中的文件。瀏覽器在沙盒環(huán)境中運(yùn)行,因此用戶必須向特定文件或目錄授予權(quán)限。這將返回一個FileSystemHandle,以便Web應(yīng)用程序可以像桌面應(yīng)用程序一樣讀取或?qū)懭霐?shù)據(jù)。

以下函數(shù)將Blob保存到本地文件:

localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));

優(yōu)點(diǎn):

  • Web應(yīng)用程序可以安全地讀取和寫入本地文件系統(tǒng)
  • 減少了上傳文件或在服務(wù)器上處理數(shù)據(jù)的需求
  • 漸進(jìn)式Web應(yīng)用程序的一項(xiàng)很棒的功能

缺點(diǎn):

  • 瀏覽器支持最少(僅限Chrome)
  • API可能會更改

這個存儲選項(xiàng)最讓我興奮,但是您需要再等幾年才能將其用于生產(chǎn)環(huán)境。

  1. 文件和目錄條目API

指標(biāo)說明容量取決于剩余磁盤空間讀取/寫入速度未知持久性數(shù)據(jù)保留到被清除為止文件和目錄條目API提供一個可用于域的沙盒文件系統(tǒng),該系統(tǒng)可以創(chuàng)建、寫入、讀取和刪除目錄和文件。

優(yōu)點(diǎn):

  • 可能有一些有趣的用途

缺點(diǎn):

  • 非標(biāo)準(zhǔn)的、實(shí)現(xiàn)之間的不兼容性,以及行為可能會改變。

MDN明確指出:不要在生產(chǎn)網(wǎng)站上使用此功能。廣泛的支持至少還需要幾年時間。

指標(biāo)說明容量每個域80Kb(20個cookie,每個cookie最多4Kb)讀取/寫入速度快持久性好:數(shù)據(jù)保留到被清除或過期為止cookie是特定于域的數(shù)據(jù)。它們以跟蹤人的聲譽(yù)而聞名,但對于任何需要維護(hù)服務(wù)器狀態(tài)的系統(tǒng)(例如登錄)來說,它們都是必不可少的。與其他存儲機(jī)制不同,cookie通常在每個HTTP請求和響應(yīng)中在瀏覽器和服務(wù)器之間傳遞。兩臺設(shè)備都可以檢查、修改和刪除cookie數(shù)據(jù)。

document.cookie在客戶端JavaScript中設(shè)置cookie值。您必須定義一個字符串,其中名稱和值用等號(=)分隔。例如:

const
  a = 1,
  b = 'two',
  state = {
    msg:  'Hello',
    name: 'Craig'
  };

值不能包含逗號、分號或空格,因此可能需要encodeURIComponent():

// 定位<main>元素
</main>const main = document.querySelector('main');

// 存儲值
main.dataset.value1 = 1;
main.dataset.state = JSON.stringify({ a:1, b:2 });

// 檢索值
console.log( main.dataset.value1 ); // "1"
console.log( JSON.parse(main.dataset.state).a ); // 1

可以使用分號分隔符附加其他cookie設(shè)置,包括:

  • ;domain=: 如果未設(shè)置,則cookie僅在當(dāng)前URL域中可用。使用;path=mysite.com允許在mysite.com的任何子域上使用它。
  • ;path=: 如果未設(shè)置,則cookie僅在當(dāng)前路徑及其子路徑中可用。將;path=/設(shè)置為允許域中的任何路徑。
  • ;max-age=: cookie到期時間(秒)——例如;max-age=60。
  • ;expires=: cookie到期日期——例如;expires=Thu, 04 July 2021 10:34:38 UTC(使用date.toUTCString()進(jìn)行適當(dāng)?shù)母袷交?/li>
  • ;secure: cookie將僅通過HTTPS傳輸。
  • ;HTTPOnly: 使cookie無法訪問客戶端JavaScript。
  • ;samesite=: 控制另一個域是否可以訪問cookie。將其設(shè)置為lax(默認(rèn)值,將cookie共享到當(dāng)前域)、strict(阻止在從另一個域遵循鏈接時發(fā)送初始cookie)或none(無限制)。

示例:設(shè)置一個在10分鐘后過期的狀態(tài)cookie,并且可在當(dāng)前域的任何路徑中使用:

localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));

document.cookie返回一個包含每個名稱和值對的字符串,它們用分號分隔。例如:

const state = JSON.parse( localStorage.getItem('state') );

下面的函數(shù)解析字符串并將其轉(zhuǎn)換為包含名稱-值對的對象。例如:

localStorage.removeItem('state')

優(yōu)點(diǎn):

  • 在客戶端和服務(wù)器之間保留狀態(tài)的可靠方法
  • 僅限于域和(可選)路徑
  • 使用max-age(秒)或Expires(日期)進(jìn)行自動到期控制
  • 默認(rèn)情況下在當(dāng)前會話中使用(設(shè)置到期日期以使數(shù)據(jù)持久保存超過頁面刷新和選項(xiàng)卡關(guān)閉)

缺點(diǎn):

  • cookie經(jīng)常被瀏覽器和插件阻止(它們通常轉(zhuǎn)換為會話cookie,以便網(wǎng)站繼續(xù)工作)
  • 笨拙的JavaScript實(shí)現(xiàn)(最好創(chuàng)建您自己的cookie處理程序或選擇js-cookie之類的庫)
  • 僅限字符串(需要序列化和反序列化)
  • 存儲空間有限
  • cookie可以被第三方腳本檢查,除非您限制訪問
  • 被指責(zé)侵犯隱私(區(qū)域立法可能要求您顯示非必要cookie的警告)
  • cookie數(shù)據(jù)附加到每個HTTP請求和響應(yīng)中,這可能會影響性能(存儲50Kb的cookie數(shù)據(jù),然后請求十個1字節(jié)的文件,將產(chǎn)生一百萬字節(jié)的帶寬)

除非沒有可行的替代方案,否則避免使用cookie。

  1. window.name

指標(biāo)說明容量變化,但應(yīng)該可以容納幾兆字節(jié)讀取/寫入速度快持久性會話數(shù)據(jù)保留到選項(xiàng)卡關(guān)閉為止window.name屬性設(shè)置和獲取窗口瀏覽上下文的名稱。您可以設(shè)置一個在瀏覽器刷新或鏈接到其他位置并單擊后退之間持久存在的單個字符串值。例如:

const
  a = 1,
  b = 'two',
  state = {
    msg:  'Hello',
    name: 'Craig'
  };

使用以下方法檢查值:

// 定位<main>元素
</main>const main = document.querySelector('main');

// 存儲值
main.dataset.value1 = 1;
main.dataset.state = JSON.stringify({ a:1, b:2 });

// 檢索值
console.log( main.dataset.value1 ); // "1"
console.log( JSON.parse(main.dataset.state).a ); // 1

優(yōu)點(diǎn):

  • 易于使用
  • 可用于僅限會話的數(shù)據(jù)

缺點(diǎn):

  • 僅限字符串:需要序列化和反序列化
  • 其他域中的頁面可以讀取、修改或刪除數(shù)據(jù)(切勿將其用于敏感信息)

window.name從未設(shè)計(jì)用于數(shù)據(jù)存儲。這是一個技巧,并且有更好的選擇。

  1. WebSQL

指標(biāo)說明容量每個域5MB讀取/寫入速度緩慢持久性數(shù)據(jù)保留到被清除為止WebSQL是將類似SQL的數(shù)據(jù)庫存儲引入瀏覽器的嘗試。示例代碼:

localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));

Chrome和某些版本的Safari支持這項(xiàng)技術(shù),但Mozilla和Microsoft反對它,轉(zhuǎn)而支持IndexedDB。

優(yōu)點(diǎn):

  • 專為強(qiáng)大的客戶端數(shù)據(jù)存儲和訪問而設(shè)計(jì)
  • 服務(wù)器端開發(fā)人員經(jīng)常使用的熟悉的SQL語法

缺點(diǎn):

  • 瀏覽器支持有限且存在錯誤
  • 瀏覽器之間的SQL語法不一致
  • 異步但笨拙的基于回調(diào)的API
  • 性能差

不要使用WebSQL!自2010年規(guī)范被棄用以來,它一直不是一個可行的選擇。

仔細(xì)檢查存儲

Storage API可以檢查Web存儲、IndexedDB和緩存API可用的空間。除Safari和IE之外的所有瀏覽器都支持基于Promise的API,該API提供.estimate()方法來計(jì)算配額(域可用的空間)和使用情況(已使用的空間)。例如:

const state = JSON.parse( localStorage.getItem('state') );

還有另外兩種異步方法可用:

  • .persist():如果站點(diǎn)有權(quán)存儲持久性數(shù)據(jù),則返回true,
  • .persisted():如果站點(diǎn)已存儲持久性數(shù)據(jù),則返回true。

瀏覽器開發(fā)者工具(在Firefox中名為Storage)中的應(yīng)用程序面板允許您查看、修改和清除localStorage、sessionStorage、IndexedDB、WebSQL、cookie和緩存存儲。

您還可以通過單擊開發(fā)者工具的“網(wǎng)絡(luò)”面板中的任何項(xiàng)目來檢查HTTP請求和響應(yīng)標(biāo)頭中發(fā)送的cookie數(shù)據(jù)。

存儲大雜燴

這些存儲解決方案都不完美,您需要在復(fù)雜的Web應(yīng)用程序中采用多種解決方案。這意味著學(xué)習(xí)更多API。但是,在每種情況下都有選擇是一件好事——當(dāng)然,假設(shè)您可以選擇合適的選項(xiàng)!

關(guān)于本地存儲替代方案的常見問題

我可以用什么代替本地存儲?

在尋找Web開發(fā)中本地存儲的替代方案時,可以考慮會話存儲、cookie和IndexedDB等選項(xiàng)。會話存儲為頁面會話期間提供臨時存儲,而cookie是與每個HTTP請求一起發(fā)送的小型數(shù)據(jù)片段,可用于會話管理和存儲有限的數(shù)據(jù)。IndexedDB為在客戶端存儲結(jié)構(gòu)化數(shù)據(jù)提供更強(qiáng)大的解決方案,使其適合需要異步數(shù)據(jù)檢索的應(yīng)用程序。 對于更廣泛的數(shù)據(jù)存儲或當(dāng)安全性和持久性至關(guān)重要時,服務(wù)器端存儲解決方案(如MySQL、PostgreSQL、MongoDB)或基于云的數(shù)據(jù)庫(如Firebase、AWS DynamoDB或Google Cloud Firestore)可能更可取。此外,一些客戶端框架提供自己的狀態(tài)管理解決方案,而服務(wù)工作者可以緩存數(shù)據(jù)和資產(chǎn)以實(shí)現(xiàn)離線功能,使其適合漸進(jìn)式Web應(yīng)用程序 (PWA)。

什么時候不應(yīng)該使用本地存儲?

本地存儲是一種通用的客戶端存儲解決方案,但在某些情況下,它可能不是最合適的選擇。首先,本地存儲不適合存儲敏感或機(jī)密信息,因?yàn)樗狈用芑虬踩胧?,使其容易受到未?jīng)授權(quán)的訪問。密碼或個人身份等關(guān)鍵數(shù)據(jù)應(yīng)使用強(qiáng)大的安全協(xié)議安全地存儲在服務(wù)器端。 其次,本地存儲的容量有限,每個域通常約為5-10 MB。它不適合需要處理大量數(shù)據(jù)的應(yīng)用程序。在這種情況下,應(yīng)考慮服務(wù)器端數(shù)據(jù)庫或更強(qiáng)大的客戶端選項(xiàng)(如IndexedDB)來容納更大的數(shù)據(jù)集。 最后,本地存儲可能會導(dǎo)致性能問題,尤其是在處理大量數(shù)據(jù)集時,因?yàn)樗竭\(yùn)行并且可能會阻塞主線程。對于性能關(guān)鍵型應(yīng)用程序,可以使用異步存儲解決方案(如IndexedDB)或?qū)崿F(xiàn)內(nèi)存緩存來維持流暢的用戶體驗(yàn)。 總而言之,雖然本地存儲對于輕量級、非敏感的數(shù)據(jù)存儲很有價值,但必須評估項(xiàng)目的具體要求。對于敏感信息、大型數(shù)據(jù)集或性能關(guān)鍵型應(yīng)用程序,應(yīng)探索替代存儲解決方案,以確保數(shù)據(jù)安全、可擴(kuò)展性和最佳用戶體驗(yàn)。

localStorage和sessionStorage哪個更好?

localStorage和sessionStorage的選擇主要取決于您所需的數(shù)據(jù)持久性持續(xù)時間和您的具體用例。 當(dāng)您需要數(shù)據(jù)在瀏覽器會話之間持久保存時,localStorage是更好的選擇。它適合存儲用戶偏好、設(shè)置或緩存資源等數(shù)據(jù),即使用戶關(guān)閉瀏覽器并在稍后返回網(wǎng)站,這些數(shù)據(jù)也應(yīng)保留給用戶。它的持久性和更大的存儲容量使其非常適合需要長期數(shù)據(jù)保留的場景。 另一方面,sessionStorage非常適合僅在當(dāng)前頁面會話期間可用的數(shù)據(jù)。當(dāng)用戶關(guān)閉選項(xiàng)卡或?yàn)g覽器時,數(shù)據(jù)會自動清除,從而確保隱私并降低無意中存儲不必要信息的風(fēng)險。這使其非常適合管理臨時數(shù)據(jù),例如表單數(shù)據(jù)、購物車內(nèi)容或單個用戶交互中的狀態(tài)管理。

什么是客戶端數(shù)據(jù)庫?

客戶端數(shù)據(jù)庫,也稱為前端數(shù)據(jù)庫,是一種駐留在Web應(yīng)用程序客戶端(通常在用戶的Web瀏覽器中)并在此運(yùn)行的數(shù)據(jù)庫。它用于在客戶端設(shè)備上存儲和管理數(shù)據(jù),允許Web應(yīng)用程序離線工作,減少服務(wù)器負(fù)載,并通過最大限度地減少對頻繁服務(wù)器請求的需求來改善用戶體驗(yàn)??蛻舳藬?shù)據(jù)庫通常用于Web開發(fā)中,以便直接在用戶的設(shè)備上存儲和檢索數(shù)據(jù)。 客戶端數(shù)據(jù)庫最常見的示例之一是IndexedDB,這是一個低級JavaScript API,它提供了一個結(jié)構(gòu)化數(shù)據(jù)庫,用于在Web瀏覽器中存儲大量數(shù)據(jù)。IndexedDB允許開發(fā)人員創(chuàng)建、讀取、更新和刪除數(shù)據(jù),使其適合需要離線存儲和管理大量信息的應(yīng)用程序。 客戶端數(shù)據(jù)庫的其他示例包括用于存儲少量數(shù)據(jù)的Web存儲(localStorage和sessionStorage),以及在JavaScript中實(shí)現(xiàn)的各種內(nèi)存數(shù)據(jù)庫,用于在用戶會話期間進(jìn)行臨時數(shù)據(jù)存儲。 客戶端數(shù)據(jù)庫對于漸進(jìn)式Web應(yīng)用程序 (PWA) 等Web應(yīng)用程序特別有用,在這些應(yīng)用程序中,即使用戶離線或互聯(lián)網(wǎng)連接有限,也需要保持功能。它們通過提供在用戶設(shè)備上本地存儲數(shù)據(jù)的機(jī)制來補(bǔ)充服務(wù)器端數(shù)據(jù)庫,從而減少延遲并增強(qiáng)用戶體驗(yàn)。

客戶端存儲有哪些不同類型?

Web開發(fā)中的客戶端存儲有多種形式,每種形式都有其自身的特性和用例。 一種常見的類型是Web存儲,其中包括localStorage和sessionStorage。localStorage適合存儲需要跨瀏覽器會話持久保存的小量數(shù)據(jù),使其適用于用戶偏好或設(shè)置。相反,sessionStorage是會話受限的,僅在單個頁面會話期間存儲數(shù)據(jù),使其非常適合臨時數(shù)據(jù),例如用戶與網(wǎng)頁交互期間所需的購物車內(nèi)容或表單數(shù)據(jù)。 另一種選擇是IndexedDB,這是一種更高級的客戶端數(shù)據(jù)庫系統(tǒng)。IndexedDB提供結(jié)構(gòu)化存儲,用于在用戶的設(shè)備上管理大量數(shù)據(jù)。它支持異步數(shù)據(jù)檢索、索引、事務(wù)等等,使其非常適合需要復(fù)雜數(shù)據(jù)處理和離線功能(如漸進(jìn)式Web應(yīng)用程序 (PWA))的應(yīng)用程序。 此外,cookie是可以存儲在客戶端設(shè)備上并與每個HTTP請求一起發(fā)送到服務(wù)器的小型數(shù)據(jù)片段。雖然如今不太常用于一般數(shù)據(jù)存儲,但cookie仍然可用于會話管理、用戶身份驗(yàn)證和跟蹤用戶偏好等任務(wù)。 每種類型的客戶端存儲都有其優(yōu)缺點(diǎn),選擇取決于您的具體要求,例如數(shù)據(jù)大小、持久性需求和用例。

以上是10個客戶端存儲選項(xiàng)以及何時使用它們的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

用于購買SSL證書的經(jīng)濟(jì)有效的轉(zhuǎn)售商平臺 用于購買SSL證書的經(jīng)濟(jì)有效的轉(zhuǎn)售商平臺 Jun 25, 2025 am 08:28 AM

在一個在線信任不可談判的世界中,SSL證書對于每個網(wǎng)站都至關(guān)重要。 SSL認(rèn)證的市場規(guī)模在2024年價值56億美元,并且由于電子商務(wù)業(yè)務(wù)的激增而推動了強(qiáng)勁的增長

SaaS的5個最佳支付門戶:您的最終指南 SaaS的5個最佳支付門戶:您的最終指南 Jun 29, 2025 am 08:28 AM

付款網(wǎng)關(guān)是付款過程的關(guān)鍵組成部分,使企業(yè)能夠在線接受付款。它充當(dāng)客戶與商人之間的橋梁,安全地傳輸付款信息并促進(jìn)交易。 為了

新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 Jul 03, 2025 pm 05:48 PM

在我們認(rèn)為人類始終超越機(jī)器的領(lǐng)域的另一個挫折中,研究人員現(xiàn)在建議AI比我們更好地理解情感。研究人員發(fā)現(xiàn)人工智能證明了一個

由于新的Microsoft AI型號 由于新的Microsoft AI型號 Jul 05, 2025 am 12:44 AM

一種新的人工智能(AI)模型已經(jīng)證明了比幾個使用最廣泛使用的全球預(yù)測系統(tǒng)更快,更精確地預(yù)測重大天氣事件的能力。該名為Aurora的模型已接受過培訓(xùn)。

您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 Jul 05, 2025 am 01:12 AM

不管喜歡與否,人工智能已成為日常生活的一部分。許多設(shè)備(包括電動剃須刀和牙刷)已成為AI驅(qū)動的“使用機(jī)器學(xué)習(xí)算法來跟蹤一個人的使用方式,Devi的方式

高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM 高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM Jul 06, 2025 am 12:37 AM

根據(jù)最近的一項(xiàng)研究,我們試圖使AI模型的功能越精確,其碳排放量就越大 - 某些提示產(chǎn)生的二氧化碳比其他提示高達(dá)50倍。

威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 Jul 04, 2025 am 12:40 AM

根據(jù)一項(xiàng)新的研究,人工智能(AI)模型在模型的目標(biāo)和用戶決定之間發(fā)生沖突時可能會威脅和勒索人類。

See all articles