Maison  >  Article  >  interface Web  >  Pure js réalise un stockage local avec des compétences space_javascript illimitées

Pure js réalise un stockage local avec des compétences space_javascript illimitées

WBOY
WBOYoriginal
2016-05-16 15:54:141449parcourir

Cela fait longtemps que je n'ai pas écrit de blog. Je pensais que même si j'avais promis de publier le code source il y a 2 ans, j'avais enfin le temps d'ouvrir la fonction de stockage local avec un espace illimité en utilisant du JS pur. .

Adresse du projethttps://github.com/xueduany/localstore,

Démo voirhttp://xueduany.github.io/localstore/,

Permettez-moi de vous donner une brève introduction au principe général. Les détails spécifiques et la gestion des exceptions seront discutés séparément plus tard lorsque j'en aurai l'occasion

Parlons d'abord du principe de percée de localStorage. Les mots officiels sont les suivants http://www.w3.org/TR/2013/PR-webstorage-20130409/

.

Vous savez donc que vous pouvez profiter du fait que le stockage local de plusieurs sous-domaines ne dépend pas les uns des autres pour concevoir et mettre en œuvre un storePool via le stockage local de plusieurs sous-domaines, dépassant ainsi la limite supérieure

Ensuite, lorsque l'API réelle est stockée, elle n'est pas enregistrée dans localStorage

C'est un peu similaire à un mode Manager, c'est à dire que vous dites au responsable de l'entrepôt ce que vous souhaitez sauvegarder, le responsable de l'entrepôt vous donne une clé, puis vous prenez la clé de l'entrepôt correspondant pour héberger vos affaires, et le gestionnaire vous donne alors Vous disposez d'un certificat de jeton. À l'avenir, il vous suffira de détenir ce certificat pour retirer les choses sauvegardées

.

L'utilisateur final n'a pas besoin de se soucier de l'endroit où mes données sont stockées, tant qu'il implémente une API similaire à localStorage

Concevez ensuite un objet js pour agir en tant qu'administrateur d'entrepôt. Combien de jetons cet administrateur doit-il prendre en charge ? Où les éléments enregistrés correspondants doivent-ils être stockés ? nous Il est nécessaire de concevoir et de mettre en œuvre un tel ensemble de structures de données

Sous la clé correspondante se trouve l'adresse de l'entrepôt où elle existe, et la durée de stockage. La notion de durée de stockage permet de calculer la fraîcheur des données, c'est-à-dire de calculer si elles ont expiré

Nous devons donc d'abord créer plusieurs iframes pour charger des fichiers proxy sous plusieurs noms de domaine, interagir les uns avec les autres via l'API HTML5 postMessage ou l'ancienne méthode inter-domaines de page, et enregistrer les données via le proxy de ce proxy

Enregistrez le stub de la clé de données sous le nom de domaine principal actuel, puis enregistrez les données réelles sous chaque nom de sous-domaine

Ok, maintenant que la limite de stockage a été dépassée, si nous voulons enregistrer une page Web, nous devons envisager de supprimer toutes les ressources statiques liées à la page Web. Pour les ressources liées à la page Web, y compris js, css, ce sont toutes. texte, c'est tout simple. Tant qu'une requête ajax est faite, vous pouvez obtenir le contenu. La seule chose à considérer est la sécurité. Les problèmes inter-domaines empêchent js d'obtenir les données de réponse. en-tête de réponse à

sur le serveur du nœud CDN.

C'est tout, obtenez le contenu sur tous les domaines

js, c'est-à-dire que peut être modifié en <script> le contenu obtenu à distance</script>, css, remplacez simplement ceci par

Ici, nous n'avons besoin de considérer que les blocs de code qui peuvent correspondre au HTML d'origine. Nous n'avons besoin de considérer qu'un seul problème, c'est-à-dire que l'expression rationnelle de js est en mode gourmand par défaut, donc notre expression régulière doit atteindre la correspondance minimale,

Recherchez ensuite le contenu correspondant dans le html et remplacez-le par le contenu déjà enregistré dans localStorage

Alors pour les photos, comment récupérer le contenu de la photo ? Nous savons que l'image est une donnée brute, binaire. Nous devons d'abord résoudre le problème de l'obtention du flux binaire de l'image

.

Ensuite, convertissez-le directement en base64 via fileReader, qui peut être enregistré localement, puis remplacez le src de l'image d'une URL par une chaîne base64

Remplacez ensuite les ressources correspondantes dans toute la page web html par nos balises spéciales

Balise LOCALSTORE, puis utilisez un algorithme de recherche récursif pour obtenir le contenu de chaque sous-magasin et le restaurer dans le code HTML complet d'origine

Restaurez ensuite la page d'origine directement via document.write

Grâce à ce principe, vous pouvez mettre un site Web hors ligne et le localiser, puis utiliser la technologie singlePage pour effectuer une navigation sans envoyer de requêtes. Bien sûr, il y a d'autres détails techniques à régler. Bon sang, laissez-moi vous expliquer la prochaine fois ! ! !

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn