ホームページ >テクノロジー周辺機器 >IT業界 >10クライアント側のストレージオプションとそれらを使用するタイミング
ブラウザのデータストレージと操作のシナリオは、以下を含みます
現在の画面、入力データ、ユーザー設定などなど、クライアントアプリケーションのステータスを保持します。
厳格なプライバシー要件を備えたローカルデータまたはファイルにアクセスするユーティリティ。dom nodeストレージ
JavaScript変数:一時的なデータは最速ですが、ページが更新されると、現在のページよりも保存する必要がないデータに最適です。
:コードが削除することを選択するまで、または
メトリック 命令
<code class="language-javascript">const a = 1, b = 'two', state = { msg: 'Hello', name: 'Craig' };</code>
長所:
短所:
すでに変数を使用しています。ページがアンインストールされているときに、可変状態の永続的なストレージを考慮することができます。
インジケータ
命令
値は文字列として保存されるため、シリアル化と敏aserializationが必要になる場合があります。たとえば、
<code class="language-javascript">// 定位<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</code>
長所:
壊れやすい:タブを更新または閉じるとすべてがクリアされます(サーバーによって値がHTMLにレンダリングされない限り)
インジケータ
命令
容量5MB読み取り/書き込み速度同期操作:クリアされるまでゆっくりとした持続的なデータが残っている可能性がありますWebストレージは2つの同様のAPIを提供します名前/値のペアを定義します。使用:
を使用してそれらを取得します
<code class="language-javascript">localStorage.setItem('value1', 123); localStorage.setItem('value2', 'abc'); localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>.removeItem():
でそれらを削除します
<code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>その他のプロパティと方法は次のとおりです
任意の値を変更すると、同じドメインに接続されている他のブラウザタブ/ウィンドウでストレージイベントが表示されます。アプリケーションはそれに応じて応答できます:
<code class="language-javascript">const a = 1, b = 'two', state = { msg: 'Hello', name: 'Craig' };</code>
長所:
短所:
インジケータ命令 容量は機器に依存します。少なくとも1GBですが、残りのディスクスペースの読み取り/書き込み速度の最大60%は、indexedDBがクリアされるまで残ります。ストアはインデックス作成したり、トランザクションを使用して更新したり、非同期方法を使用して検索できます。
<code class="language-javascript">// 定位<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</code>次のコードはMyDBデータベースに接続し、TODOオブジェクトストアを初期化します(SQLテーブルまたはMongoDBコレクションに似ています)。次に、IDという名前の自動インクリメントキーを定義します:
<code class="language-javascript">localStorage.setItem('value1', 123); localStorage.setItem('value2', 'abc'); localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>DB接続の準備ができたら、トランザクションに新しいデータ項目を追加できます。
最初の項目など、値を取得できます。
<code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>
長所:
<code class="language-javascript">localStorage.removeItem('state')</code>最大スペースを備えた柔軟なデータストレージ
強力なトランザクション、インデックス、および検索オプション
キャッシュapi
命令
容量はデバイスに依存しますが、各ドメインは50MBの読み取り/書き込み速度高速データをクリアまたはキャッシュAPIに制限します2週間後のSafariでHTTPリクエストと応答オブジェクトのペアにストレージを提供します。任意の数のネットワークデータ項目を保存したいだけ多くの名前のキャッシュを作成できます。
このAPIは、サービスワーカーで一般的に使用され、プログレッシブWebアプリケーションのネットワーク応答をキャッシュします。デバイスがネットワークから切断されると、Webアプリケーションがオフラインで実行できるように、キャッシュされた資産を非難することができます。
次のコードでは、Mycacheと呼ばれるキャッシュにネットワーク応答を保存します。
<code class="language-javascript">const a = 1, b = 'two', state = { msg: 'Hello', name: 'Craig' };</code>
同様の関数は、キャッシュからアイテムを取得できます。この例では、応答ボディテキストを返します:
<code class="language-javascript">// 定位<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</code>
長所:
短所:
キャッシュAPIは、ネットワークから取得されたファイルとデータを保存するのに最適な選択肢です。アプリケーションの状態を保存するために使用するかもしれませんが、この目的のために設計されておらず、より良いオプションがあります。 5.5 appcache
メトリック
手順
容量は残りのディスクスペースに依存します。ローカルファイルシステムでファイルを読み取り、書き込み、変更、削除するブラウザ。ブラウザはサンドボックス環境で実行されるため、ユーザーは特定のファイルまたはディレクトリに権限を付与する必要があります。これにより、ファイルシステムハンドルが返され、Webアプリケーションがデスクトップアプリケーションのようなデータを読み取りまたは書き込むことができます。
<code class="language-javascript">localStorage.setItem('value1', 123); localStorage.setItem('value2', 'abc'); localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>長所:
メトリック
手順
長所:
短所:
mdnは明確に述べています。幅広いサポートには少なくとも数年かかります。
他のクッキー設定は、次のようなセミコロンデリミターを使用して添付できます。
クライアントとサーバーの間で状態を保存するための信頼できる方法
次の方法を使用して値を確認します
命令
ブラウザ間のsql構文間の矛盾
ブラウザ開発者ツールのアプリケーションパネル(Firefoxのストレージと呼ばれる)を使用すると、LocalStorage、SessionStorage、IndexEdDB、WebQL、Cookie、およびキャッシュストレージを表示、変更、およびクリアできます。 開発者ツールのWebパネルの任意のアイテムをクリックして、HTTPリクエストと応答ヘッダーで送信されたCookieデータを確認することもできます。 これらのストレージソリューションは完璧ではありません。複雑なWebアプリケーションで複数のソリューションを採用する必要があります。これは、より多くのAPIを学ぶことを意味します。しかし、あらゆる状況で選択できるのは良いことです。もちろん、正しいオプションを選択できるとしましょう。 Web開発でローカルストレージの代替品を探している場合、セッションストレージ、Cookie、IndexEdDBなどのオプションを考慮することができます。セッションストレージはページセッションに一時的なストレージを提供しますが、Cookieは、セッション管理と限られたデータの保存に使用できる各HTTPリクエストで送信される小さなデータです。 IndexEdDBは、クライアント側に構造化されたデータを保存するためのより強力なソリューションを提供し、非同期データ取得を必要とするアプリケーションに適しています。
サーバー側のストレージソリューション(MySQL、PostgreSQL、MongoDBなど)またはクラウドベースのデータベース(Firebase、AWS Dynamodb、Google Cloud Firestoreなど)は、より広いデータストレージや、セキュリティと持続性が重要である場合があります。さらに、一部のクライアントフレームワークは独自の国家管理ソリューションを提供しますが、サービスワーカーはオフライン機能のデータとアセットをキャッシュでき、プログレッシブWebアプリケーション(PWAS)に適しています。 ローカルストレージはユニバーサルクライアントストレージソリューションですが、場合によっては最も適切な選択肢ではない場合があります。第一に、ローカルストレージは、不正アクセスに対して脆弱な暗号化またはセキュリティ対策がないため、機密情報または機密情報の保存には適していません。パスワードや個人のアイデンティティなどの重要なデータは、強力なセキュリティプロトコルを使用してサーバー側に安全に保存する必要があります。
第二に、ローカルストレージの容量は限られており、通常はドメインあたり約5〜10 MBです。大量のデータを処理する必要があるアプリケーションには適していません。この場合、サーバー側のデータベースまたはIndexEdDBなどのより強力なクライアントオプションは、より大きなデータセットに対応するために考慮する必要があります。
最後に、ローカルストレージは、特に大規模なデータセットを扱う場合、同期してメインスレッドをブロックできるため、パフォーマンスの問題を引き起こす可能性があります。パフォーマンスが批判的なアプリケーションでは、IndexEdDBなどの非同期ストレージソリューションを使用したり、メモリキャッシングを実装してスムーズなユーザーエクスペリエンスを維持できます。
要約すると、ローカルストレージは軽量の非敏感なデータストレージにとって価値がありますが、プロジェクトの特定の要件を評価する必要があります。機密情報、大規模なデータセット、またはパフォーマンスクリティカルなアプリケーションについては、データセキュリティ、スケーラビリティ、および最高のユーザーエクスペリエンスを確保するために、代替ストレージソリューションを調査する必要があります。 LocalStorageとSessionStorageの選択は、主に必要なデータの持続時間と特定のユースケースに依存します。
LocalStorageは、ブラウザセッションの間にデータを持続する必要がある場合に、より良い選択です。ユーザーの設定、設定、キャッシュリソースなどのデータを保存するのに適しています。これは、ユーザーがブラウザを閉じてWebサイトに戻す場合でも、ユーザーに保持する必要があります。その持続性とストレージ容量が大きくなると、長期的なデータ保持が必要なシナリオに最適です。
一方、SessionStorageは、現在のページセッション中にのみ利用可能なデータに最適です。ユーザーがタブまたはブラウザを閉じると、データが自動的にクリアされ、プライバシーが確保され、不要な情報の意図しないストレージのリスクが低下します。これにより、単一のユーザーインタラクションでフォームデータ、カートコンテンツ、状態管理などの一時的なデータを管理するのに最適です。
cookie
インジケータ
命令
ドメインあたり80kb(20クッキー、クッキーあたり最大4kb)速い読み取り/書き込み速度と良好な耐久性:データはまで保持されるまで保持されますクリアまたは有効期限が切れたCookieはドメイン固有のデータです。彼らは人々の評判を追跡することで知られていますが、ログインなどのサーバーステータスを維持する必要があるシステムには不可欠です。他のストレージメカニズムとは異なり、Cookieは通常、各<code class="language-javascript">const
a = 1,
b = 'two',
state = {
msg: 'Hello',
name: 'Craig'
};</code>
<code class="language-javascript">// 定位<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</code>
; domain =:設定されていない場合、Cookieは現在のURLドメインでのみ使用できます。使用; path = mysite.comでは、mysite.comの任意のサブドメインで使用できます。
例:10分後に有効期限が切れ、現在のドメインへの任意のパスで使用できるステータスCookieを設定します。
<code class="language-javascript">localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>
<code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>
<code class="language-javascript">localStorage.removeItem('state')</code>
ドメインと(オプションの)パスのみ
実行可能な代替手段がない限り、Cookieの使用は避けてください。
メトリック
命令
容量の変更は、いくつかのメガバイトの読み取り/書き込み速度に対応できるはずです。 .Nameプロパティは、ウィンドウブラウジングコンテキストの名前を設定して取得します。ブラウザを更新するか、別の場所にリンクしてからクリックするまでの間に持続する単一の文字列値を設定できます。たとえば、<code class="language-javascript">const
a = 1,
b = 'two',
state = {
msg: 'Hello',
name: 'Craig'
};</code>
<code class="language-javascript">// 定位<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</code>
長所:使いやすい
短所:文字列のみ:シリアル化と降下が必要です
です。
インジケータ
>ドメインあたり5MB容量5MB読み取り/書き込みwebQLがブラウザを導入するためのSQLのようなデータベースストレージの試行です。サンプルコード:
ChromeとSafariのいくつかのバージョンはこのテクノロジーをサポートしていますが、MozillaとMicrosoftはそれに反対し、代わりにIndexedDBをサポートしています。 <code class="language-javascript">localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>
長所:
ブラウザのサポートは限られており、エラーがありますasyncですが、不器用なコールバックベースのAPI
ストレージAPIは、Webストレージ、IndexEdDB、およびキャッシュAPIの使用可能なスペースを確認できます。 SafariおよびIEを除くすべてのブラウザは、約束ベースのAPIをサポートしています。これは、クォータ(ドメインで使用可能なスペース)と使用(使用されるスペース)を計算するために.estimate()メソッドを提供します。たとえば、他に2つの非同期メソッドがあります:
ストレージhotpot
ローカルストレージの代替案に関するよくある質問
ローカルストレージの代わりに何を使用できますか?
いつローカルストレージを使用する必要はありませんか?
ローカルストレージまたはsessionStorageのどちらが良いですか?
クライアントデータベースとは何ですか?
フロントエンドデータベースとも呼ばれるクライアントデータベースは、Webアプリケーションクライアント(通常はユーザーのWebブラウザー)にあるデータベースであり、そこで実行されます。クライアントデバイスのデータを保存および管理するために使用され、Webアプリケーションがオフラインで動作し、サーバーの負荷を削減し、頻繁にサーバーリクエストの必要性を最小限に抑えることでユーザーエクスペリエンスを向上させることができます。クライアントデータベースは、ユーザーのデバイスにデータを直接保存および取得するためにWeb開発でよく使用されます。
クライアントデータベースの最も一般的な例の1つは、Webブラウザーに大量のデータを保存するための構造化されたデータベースを提供する低レベルのJavaScript APIであるIndexEdDBです。 IndexEdDBを使用すると、開発者はデータを作成、読み取り、更新、削除できるようになり、大量の情報のオフラインストレージと管理が必要なアプリケーションに適しています。
クライアントデータベースの他の例には、少量のデータを保存するためのWebストレージ(LocalStorageおよびSessionStorage)、およびユーザーセッション中に一時的なデータストレージのためにJavaScriptに実装されたさまざまなインメモリデータベースが含まれます。
クライアントデータベースは、ユーザーがオフラインであるか、インターネット接続が限られている場合でも、機能性を維持する必要があるプログレッシブWebアプリケーション(PWAS)などのWebアプリケーションに特に役立ちます。ユーザーデバイスにデータをローカルに保存するメカニズムを提供することにより、サーバー側のデータベースを補完し、それによりレイテンシを削減し、ユーザーエクスペリエンスを向上させます。
Web開発には多くの形式のクライアントストレージがあり、それぞれに独自の特性とユースケースがあります。
一般的なタイプは、LocalStorageとSessionStorageを含むWebストレージです。 LocalStorageは、ブラウザセッション全体で持続する必要がある少量のデータを保存するのに適しており、ユーザーの好みや設定に適しています。代わりに、SessionStorageはセッションに制限されており、1ページのセッション中にのみデータを保存し、ショッピングカートのコンテンツやWebページとのユーザーのやり取り中に必要なフォームデータなど、一時的なデータに最適です。
別のオプションは、より高度なクライアントデータベースシステムであるIndexEdDBです。 indexedDBは、ユーザーのデバイス上の大量のデータを管理するための構造化されたストレージを提供します。非同期データ検索、インデックス作成、トランザクションなどをサポートしているため、複雑なデータ処理やプログレッシブWebアプリケーション(PWA)などのオフライン機能を必要とするアプリケーションに最適です。
さらに、Cookieは、クライアントデバイスに保存され、各HTTPリクエストでサーバーに送信できる小さなデータフラグメントです。今日の一般的なデータストレージでは頻繁に使用されていませんが、Cookieは、セッション管理、ユーザー認証、ユーザー設定の追跡などのタスクに使用できます。
クライアントストレージの各タイプには長所と短所があり、選択はデータサイズ、永続性要件、ユースケースなどの特定の要件に依存します。
以上が10クライアント側のストレージオプションとそれらを使用するタイミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。