IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Gestion du cache avec sessionStorage, et les metas cachecontrol


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 21
    Points
    21
    Par défaut Gestion du cache avec sessionStorage, et les metas cachecontrol
    Bonjour,

    J'ai créé une application web qui permet de naviguer dans une arborescence grâce à des requêtes AJAX.
    Pour rendre la navigation plus rapide et pouvoir naviguer hors connexion j'ai mis au point un script qui utilise l'outil sessionStorage.
    Je verifie manuellement si l'objet que je veux est en cache et si ce n'est pas le cas je fais ma requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    tst = window.sessionStorage.getItem(objectId.toString()) 
    if (!tst) {	
    	console.log("No cache defined");									//If we don't have the object in cache 
    	$.getJSON('/ws?function=objectNavigation', {"parent" : objectId,"display":"children"})//the request is done
            .done(function(data){
    		jsondatalist = JSON.stringify(data.listobject);
    		output = displayNodes(JSON.parse(jsondatalist));		
    		document.getElementById("zone").innerHTML = output;				
    	})
    	.fail(function(jqxhr, textStatus, error) {
    		var err = textStatus + ", " + error;
    		console.log("Request Failed: " + err);
    	})
    } else {
    	console.log("Cache used");
    	output = displayObject(tst);      //else we display the object
    	document.getElementById("zone").innerHTML = output;
    }
    Ce système est assez bancal, j'aimerai améliorer cette partie du script.
    J'ai lu que des metadonnées dans le html (no-cache) permettraient que le navigateur envoie un jeton au serveur pour vérifier que le contenu est a jour.
    Ensuite le navigateur fait comme pour une page html et utiliserai le résultat qu'il a déjà téléchargé.
    Voici ma page html

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <!DOCTYPE html>
    <html>	
    	<head>
    		<meta charset="utf-8" />
            <meta name="format-detection" content="telephone=no" />
            <meta name="msapplication-tap-highlight" content="no" />
            <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
            <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
            <meta http-equiv="Cache-control" content="no-cache"/> <!-- test metadonnées -->
            <link rel="stylesheet" type="text/css" href="/static/css/index.css" />
    	<title>Zones</title>
     
            <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> <!-- Les sources de la bibliothèque JQuery -->
            <script type="text/javascript" src="/static/js/headnav.js"></script>  
            <script type="text/javascript" src="/static/js/zone.js"></script>	
            <script type="text/javascript" src="/static/js/valuedisplay.js"></script>   
            <script type="text/javascript" src="/static/js/flotr2.js"></script>
    	</head>
    	<body>
    	<header>
    		<button id="backbutton" onclick="history.back()"></button>
    		<button id="nextbutton" onclick="history.forward()"></button>
            <button id="homebutton" onclick="document.location='/html/home.html'"></button>
    	</header>
    	<nav>
    		<input id="nav" type="search" name="nav" placeholder="Rechercher..." onkeyup="searchDataNodes()" />
     
    	</nav>
            <div id="ajax">
                <div id="zonePanel">
            	<table id="zone">
            	</table>
                </div>
            </div>
            </body>
    </html>

    Quelqu'un pourrait-il m'eclairer ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Quelqu'un pourrait-il m'eclairer ?
    peut être Comprendre le storage en HTML5.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Merci NoSmoking, mais cela ne dis pas si lorsque j’exécute ma requête, le navigateur regarde dans ce dictionnaire sessionStorage pour récupérer automatiquement le résultat ? En utilisant les outils navigateurs j'ai vu qu'il refait la requête systématiquement.

    Pour le contenu statique ( une page HTML par exemple ) le serveur envoie au navigateur la page avec un jeton qui identifie la fraîcheur de celle-ci. A chaque fois que la navigateur aura besoin de la re-télécharger il va envoyer le jeton au serveur pour vérifier que la page est toujours fraîche.Si c’est le cas il réutilise la page en cache.
    Cette opération est configurable grace a des méta-données dans la page html et avec des configurations au niveau du serveur ( Apache pour moi ).

    Je voulais savoir si il etais possible de configurer mon projet pour que le navigateur fasse pareil pour les requetes ajax, a savoir envoyer un jeton de 'fraicheur' et recuperer automatiquement le resultat en cache si le contenu est frais

    Si tu connais un pro en cache

Discussions similaires

  1. [Qt WebKit] Gestion du cache
    Par chrtophe dans le forum Moteurs Web
    Réponses: 1
    Dernier message: 20/11/2014, 21h02
  2. Gestion du cache avec ADO
    Par Slyteck dans le forum Bases de données
    Réponses: 3
    Dernier message: 30/08/2011, 19h39
  3. Réponses: 0
    Dernier message: 03/06/2010, 14h15
  4. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  5. Afficher les fichiers cachés avec apache ?
    Par Michaël dans le forum Apache
    Réponses: 2
    Dernier message: 20/12/2004, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo