Maison >Périphériques technologiques >Industrie informatique >10 options de stockage côté client et quand l'utiliser
Le stockage et les opérations des données du navigateur, également appelés stockage client, sont utiles lorsque les données ne sont pas nécessaires ou ne peuvent pas être envoyées à un serveur Web.
Les scénarios de stockage et de fonctionnement des données du navigateur comprennent:
Voici dix options de stockage de données de navigateur:
Cet article explorera ces dix différentes façons de stocker les données du navigateur, couvrant leurs limites, leurs avantages et leurs inconvénients, et les meilleures utilisations de chaque technologie.
Avant de parcourir ces options, jetez un œil rapide à la persistance des données ...
Habituellement, les données que vous stockez seront:
La situation réelle est plus détaillée.
Les données permanentes peuvent être bloquées ou supprimées par les utilisateurs, les systèmes d'exploitation, les navigateurs ou les plug-ins à tout moment. Lorsque le navigateur aborde la capacité allouée à ce type de stockage, il peut décider de supprimer les éléments plus anciens ou plus grands.
Le navigateur enregistrera également l'état de la page. Vous pouvez partir à partir de la navigation sur le site Web et cliquer en arrière ou fermer et rouvrir l'onglet; Les variables et les données considérées comme une session uniquement sont toujours disponibles. pros: Inconvénients: Vous utilisez déjà des variables. Vous pouvez considérer le stockage permanent de l'état variable lors de la désinstallation de la page. sont stockées sous forme de chaînes, donc la sérialisation et la désérialisation peuvent être nécessaires. Par exemple: pros: Inconvénients: Les nœuds DOM stockent plus lentement que les variables. Utilisez-le avec prudence lorsqu'il est utile de stocker l'état d'un composant en HTML. Stockage ou mise à jour des éléments nommés à l'aide de .SetItem (): les récupérer en utilisant .getItem (): Supprimez-les avec .reMoveItem (): Les autres propriétés et méthodes incluent: La modification de n'importe quelle valeur augmentera un événement de stockage dans d'autres onglets de navigateur / Windows connectés au même domaine. Votre demande peut répondre en conséquence: pros: Inconvénients: Le stockage Web est parfait pour des valeurs plus simples, plus petites et temporaires. Il n'est pas très adapté pour stocker de grandes quantités d'informations structurées, mais vous pouvez éviter les problèmes de performances en écrivant des données lorsque la page est déchargée.
Indicateur
Les fonctions similaires peuvent récupérer des éléments de Cache. Dans cet exemple, il renvoie le texte du corps de réponse: pros: Inconvénients: L'API du cache est le meilleur choix pour stocker des fichiers et des données récupérés du réseau. Vous pouvez l'utiliser pour stocker l'état d'application, mais il n'est pas conçu à cet effet et il existe de meilleures options.
5.5 AppCache
Métriques
Métriques
N'utilisez pas cette fonctionnalité sur les sites Web de production
Évitez d'utiliser des cookies sauf s'il n'y a pas d'alternative viable. Vérifiez la valeur en utilisant la méthode suivante: pros: Inconvénients: window.name n'a jamais été conçu pour le stockage de données. C'est une astuce, et il existe de meilleures options pour .
Indicateur
Le panneau d'application dans l'outil de développeur de navigateur (appelé Storage dans Firefox) vous permet de visualiser, de modifier et d'effacer Localstorage, SessionStorage, indededDB, websQL, cookies et stockage de cache. Vous pouvez également vérifier les données de cookie envoyées dans les en-têtes de demande HTTP et de réponse en cliquant sur n'importe quel élément du panneau Web de l'outil de développeur. Ces solutions de stockage ne sont pas parfaites, vous devez adopter plusieurs solutions dans des applications Web complexes. Cela signifie apprendre plus d'API. Mais c'est une bonne chose d'avoir le choix dans chaque situation - bien sûr, disons que vous pouvez choisir la bonne option! Lorsque vous recherchez des alternatives au stockage local dans le développement Web, des options telles que le stockage de session, les cookies et l'indexé peuvent être prises en compte. Le stockage de session fournit un stockage temporaire pour les séances de page, tandis que les cookies sont de petits éléments de données envoyés avec chaque demande HTTP qui peut être utilisée pour la gestion de session et le stockage de données limitées. IndededDB fournit une solution plus puissante pour stocker des données structurées du côté du client, ce qui le rend adapté aux applications qui nécessitent une récupération de données asynchrones.
Les solutions de stockage côté serveur (telles que MySQL, PostgreSQL, MongoDB) ou les bases de données basées sur le cloud (telles que Firebase, AWS DynamoDB ou Google Cloud Firestore) peuvent être préférables pour un stockage de données plus large ou lorsque la sécurité et la persistance sont essentielles. De plus, certains cadres clients fournissent leurs propres solutions de gestion d'État, tandis que les travailleurs de service peuvent mettre en cache des données et des actifs pour les fonctionnalités hors ligne, ce qui les rend adaptés aux applications Web progressives (PWA). Le stockage local est une solution de stockage client universelle, mais dans certains cas, ce n'est peut-être pas l'option la plus appropriée. Premièrement, le stockage local ne convient pas au stockage d'informations sensibles ou confidentielles car elle manque de cryptage ou de mesures de sécurité qui la rendent vulnérable à l'accès non autorisé. Les données critiques telles que les mots de passe ou les identités personnelles doivent être stockées en toute sécurité côté serveur à l'aide d'un protocole de sécurité solide.
Deuxièmement, le stockage local a une capacité limitée, généralement d'environ 5 à 10 Mo par domaine. Il ne convient pas aux applications qui doivent traiter de grandes quantités de données. Dans ce cas, les bases de données côté serveur ou les options client plus puissantes telles que IndededDB doivent être prises en compte pour s'adapter aux ensembles de données plus importants.
Enfin, le stockage local peut entraîner des problèmes de performances, en particulier lorsqu'il s'agit de grands ensembles de données, car il s'exécute de manière synchrone et peut bloquer le thread principal. Pour les applications critiques de performance, vous pouvez utiliser des solutions de stockage asynchrones telles que IndededDB ou implémenter la mise en cache de mémoire pour maintenir une expérience utilisateur fluide.
En résumé, bien que le stockage local soit précieux pour le stockage léger des données non sensible, les exigences spécifiques du projet doivent être évaluées. Pour des informations sensibles, de grands ensembles de données ou des applications critiques de performances, des solutions de stockage alternatives doivent être explorées pour garantir la sécurité des données, l'évolutivité et la meilleure expérience utilisateur. Le choix de LocalStorage et SessionStorage dépend principalement de la durée de persistance des données dont vous avez besoin et de votre cas d'utilisation spécifique.
LocalStorage est un meilleur choix lorsque vous avez besoin de données pour être persistée entre les séances de navigateur. Il convient au stockage de données telles que les préférences de l'utilisateur, les paramètres ou les ressources de cache, qui doivent être conservées à l'utilisateur même si l'utilisateur ferme le navigateur et revient sur le site Web plus tard. Sa persistance et sa plus grande capacité de stockage le rendent idéal pour les scénarios où une rétention de données à long terme est requise.
SessionStorage, en revanche, est idéal pour les données qui ne sont disponibles que lors de la session de page en cours. Lorsqu'un utilisateur ferme un onglet ou un navigateur, les données sont automatiquement effacées, garantissant la confidentialité et réduisant le risque de stockage non intentionnel d'informations inutiles. Cela le rend idéal pour gérer des données temporaires telles que les données de formulaire, le contenu de CART ou la gestion de l'État dans une seule interaction utilisateur. La base de données client, également connue sous le nom de base de données frontale, est une base de données qui réside dans le client d'application Web (généralement dans le navigateur Web de l'utilisateur) et y s'exécute. Il est utilisé pour stocker et gérer des données sur les appareils clients, permet aux applications Web de travailler hors ligne, de réduire la charge du serveur et d'améliorer l'expérience utilisateur en minimisant le besoin de demandes de serveurs fréquentes. Les bases de données des clients sont souvent utilisées dans le développement Web pour stocker et récupérer des données directement sur l'appareil de l'utilisateur.
L'un des exemples les plus courants de bases de données clients est indexédDB, une API JavaScript de bas niveau qui fournit une base de données structurée pour stocker de grandes quantités de données dans un navigateur Web. IndededDB permet aux développeurs de créer, de lire, de mettre à jour et de supprimer des données, ce qui le rend adapté aux applications qui nécessitent un stockage et une gestion hors ligne de grandes quantités d'informations.
D'autres exemples de bases de données clients incluent le stockage Web (LocalStorage et SessionStorage) pour stocker de petites quantités de données, ainsi que diverses bases de données en mémoire implémentées en JavaScript pour le stockage de données temporaires pendant les séances utilisateur.
Les bases de données des clients sont particulièrement utiles pour les applications Web telles que les applications Web progressives (PWAS), où la fonctionnalité doit être maintenue même si l'utilisateur est hors ligne ou a une connexion Internet limitée. Ils complètent la base de données côté serveur en fournissant un mécanisme pour stocker les données localement sur les appareils utilisateur, réduisant ainsi la latence et améliorant l'expérience utilisateur. Il existe de nombreuses formes de stockage client dans le développement Web, chacune avec ses propres caractéristiques et cas d'utilisation.
Un type commun est le stockage Web, qui comprend LocalStorage et SessionStorage. LocalStorage convient au stockage de petites quantités de données qui doivent être persistées entre les séances de navigateur, ce qui le rend adapté aux préférences ou paramètres des utilisateurs. Au lieu de cela, SessionStorage est limitée de session, stockant les données uniquement pendant une seule session, ce qui la rend idéale pour les données temporaires, telles que le contenu de panier ou les données de formulaire requises lors de l'interaction utilisateur avec les pages Web.
Une autre option est IndededDB, un système de base de données client plus avancé. IndededDB fournit un stockage structuré pour gérer de grandes quantités de données sur les appareils des utilisateurs. Il prend en charge la récupération des données asynchrones, l'indexation, les transactions, etc., ce qui le rend idéal pour les applications qui nécessitent un traitement complexe de données et des capacités hors ligne telles que les applications Web progressives (PWA).
De plus, les cookies sont de petits fragments de données qui peuvent être stockés sur le périphérique client et envoyés au serveur avec chaque demande HTTP. Bien qu'ils ne soient pas souvent utilisés dans le stockage général des données aujourd'hui, les cookies peuvent toujours être utilisés pour des tâches telles que la gestion des sessions, l'authentification des utilisateurs et le suivi des préférences des utilisateurs.
Chaque type de stockage client a ses avantages et ses inconvénients, et le choix dépend de vos exigences spécifiques telles que la taille des données, les exigences de persistance et les cas d'utilisation.
Variables JavaScript
Métriques Instructions La capacité n'est pas strictement limitée, mais lorsque vous remplissez la mémoire, le navigateur peut ralentir ou écraser les vitesses de lecture / écriture sont Les options les plus rapides ont une mauvaise persistance: les données seront actualisées par le navigateur et effacées pour stocker l'état dans les variables JavaScript est l'option la plus rapide et la plus facile. Je crois que vous n'avez pas besoin d'un exemple, mais ... <code class="language-javascript">const
a = 1,
b = 'two',
state = {
msg: 'Hello',
name: 'Craig'
};</code>
stockage de nœud DOM
Indicateur Instructions La capacité n'est pas strictement limitée, mais ne convient pas à de grandes quantités de données à lire / écrire rapidement, mauvaise persistance: les données peuvent être Rafraîchis par d'autres scripts ou rafraîchi la plupart des éléments DOM (à la page ou en mémoire) peuvent stocker des valeurs dans les propriétés nommées. Il est plus sûr d'utiliser des noms d'attribut préfixés avec des données-:
Les valeurs <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>
Storage Web (localStorage et SessionStorage)
Indicateur Instructions Capacité 5 Mo de vitesse de lecture / écriture Fonctionnement synchrone: peut être des données persistantes lentes jusqu'à ce qu'elle soit effacée que le stockage Web fournit deux API similaires Pour définir les paires de noms / valeur. Utilisation:
<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>
<code class="language-javascript">const
a = 1,
b = 'two',
state = {
msg: 'Hello',
name: 'Craig'
};</code>
indexédb
Indicateurs Instructions La capacité dépend de l'équipement. Au moins 1 Go, mais jusqu'à 60% des données de persistance rapide de la vitesse de lecture / écriture du disque restant restent jusqu'à ce qu'elle soit effacée indexdDB fournit une API de bas niveau similaire à l'OSQL pour stocker de grandes quantités de données. Le magasin peut être indexé, peut être mis à jour à l'aide des transactions et peut être recherché à l'aide de méthodes asynchrones. <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>
Le code suivant se connecte à la base de données MyDB et initialise le magasin d'objets TODO (similaire aux tables SQL ou aux collections MongoDB). Il définit ensuite une clé d'accès automatique nommé 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>
Une fois la connexion DB prête, vous pouvez ajouter de nouveaux éléments de données dans une transaction: <code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>
Vous pouvez récupérer des valeurs, telles que le premier élément: <code class="language-javascript">localStorage.removeItem('state')</code>
pros: Stockage de données flexible avec un espace maximum
Inconvénients: une API complexe de rappel et d'événements
IndededDB est le meilleur choix pour un stockage fiable de grandes quantités de données, mais vous devez utiliser une bibliothèque de wrapper telle que IDB, Dexie.js ou JSStore.
Instructions La capacité dépend de l'appareil, mais Safari limite chaque domaine à 50 Mo de données de lecture / écriture de données persistantes pour être claires ou cache API Fournit un stockage pour la demande HTTP et les paires d'objets de réponse jusqu'à deux semaines plus tard dans Safari. Vous pouvez créer autant de caches nommés que vous souhaitez stocker un certain nombre d'éléments de données réseau.
<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>
AppCache est le prédécesseur de l'API de cache qui a expiré. Ce n'est pas la solution de stockage que vous recherchez. Il n'y a rien de bon à regarder ici. Veuillez partir.
API d'accès au système de fichiers
Instructions La capacité dépend de la vitesse de lecture / écriture d'espace disque restant dépend des données de persistance du système de fichiers restent jusqu'à ce que le système de fichiers efface l'accès à l'API autorise l'API. navigateur pour lire, écrire, modifier et supprimer des fichiers dans le système de fichiers local. Le navigateur s'exécute dans un environnement de bac à sable, donc l'utilisateur doit accorder des autorisations à un fichier ou un répertoire spécifique. Cela renvoie un Système de fichiers pour que l'application Web puisse lire ou écrire des données comme une application de bureau.
La fonction suivante enregistre le blob dans un fichier local: <code class="language-javascript">localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>
API d'entrée de fichiers et de répertoire
Instructions La capacité dépend de la vitesse de lecture / écriture du disque restant des données de persistance inconnues jusqu'à ce qu'elle soit effacée, l'API d'entrée du fichier et le répertoire fournit un bac à sable Système de fichiers qui peut être utilisé pour les domaines qui créent, écrivent, lisent et suppriment les répertoires et les fichiers.
pros:
. Il faudra au moins quelques années pour un large soutien.
cookie
Indicateur Instructions Capacité 80KB par domaine (20 cookies, jusqu'à 4KB par cookie) Vitesse de lecture / écriture rapide et bonne durabilité: les données sont conservées jusqu'à ce que Il est éliminé ou des cookies expirés sont des données spécifiques au domaine. Ils sont connus pour suivre la réputation des gens, mais ils sont essentiels pour tout système qui doit maintenir l'état du serveur, comme la connexion. Contrairement à d'autres mécanismes de stockage, les cookies sont généralement passés entre le navigateur et le serveur dans chaque demande et réponse HTTP HTTP. Les deux appareils peuvent vérifier, modifier et supprimer les données de cookie.
<code class="language-javascript">const
a = 1,
b = 'two',
state = {
msg: 'Hello',
name: 'Craig'
};</code>
Les valeurs ne peuvent pas contenir des virgules, des demi-colons ou des espaces, donc EncodeuriComponent () peut être nécessaire: <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>
D'autres paramètres de cookies peuvent être joints à l'aide de délimiteurs de semi-colonières, y compris: ; domaine =: Si ce n'est pas défini, le cookie n'est disponible que dans le domaine URL actuel. Use; path = mysite.com permet d'être utilisé sur n'importe quel sous-domaine de mysite.com.
Exemple: définissez un cookie d'état qui expire après 10 minutes et peut être utilisé dans n'importe quel chemin vers le domaine actuel: <code class="language-javascript">localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>
Document.cookie Renvoie une chaîne contenant chaque paire de noms et de valeur, séparée par un point-virgule. Par exemple: <code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>
La fonction ci-dessous analyse la chaîne et la convertit en un objet contenant une paire de valeurs de nom. Par exemple: <code class="language-javascript">localStorage.removeItem('state')</code>
pros: moyen fiable de préserver l'état entre le client et le serveur
Inconvénients:
window.name
Métriques Instructions Les changements de capacité, mais devraient être en mesure de s'adapter à plusieurs mégaoctets de vitesses de lecture / d'écriture de la session de persistance restent à s'adapter jusqu'à la fermeture jusqu'à la fenêtre .Name Les propriétés définissent et obtient le nom du contexte de navigation de la fenêtre. Vous pouvez définir une seule valeur de chaîne qui persiste entre rafraîchir le navigateur ou lier à un autre emplacement et cliquer en arrière. Par exemple: <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>
Instructions Capacité 5 Mo par domaine Lire / écrire des données de persistance lente jusqu'à ce qu'elle soit effacée WebSQL est une tentative de stockage de base de données de type SQL pour introduire des navigateurs. Exemple de code:
<code class="language-javascript">localStorage.setItem('value1', 123);
localStorage.setItem('value2', 'abc');
localStorage.setItem('state', JSON.stringify({ a:1, b:2, c:3 }));</code>
Chrome et certaines versions de Safari prennent en charge cette technologie, mais Mozilla et Microsoft s'y opposent et prennent en charge indexéddb. Conçu pour le stockage et l'accès puissants des données du client
Inconvénients: La prise en charge du navigateur est limitée et il y a des erreurs
N'utilisez pas WebSQL! Ce n'est pas une option viable depuis que les spécifications de 2010 ont été obsolètes.
L'API de stockage
peut vérifier l'espace disponible du stockage Web, des API indexéddb et du cache. Tous les navigateurs à l'exception de Safari et IE prennent en charge une API basée sur les promesses, qui fournit une méthode .Stimate () pour calculer les quotas (l'espace disponible pour le domaine) et l'utilisation (l'espace utilisé). Par exemple: <code class="language-javascript">const state = JSON.parse( localStorage.getItem('state') );</code>
Il existe deux autres méthodes asynchrones disponibles:
rangement hotpot
Les questions fréquemment posées sur les alternatives de stockage locales
Que puis-je utiliser au lieu du stockage local?
Quand ne devriez-vous pas utiliser le stockage local?
Quel est le meilleur, localStorage ou SessionStorage?
Qu'est-ce qu'une base de données client?
Quels sont les différents types de stockage client?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!