Jquery getScript la mise en cache
Par Défaut $.getScript() désactive la mise en cache et vous pouvez utiliser $.ajaxSetup et mis en cache pour vrai. Lors de l'essai si le script est en fait mis en cache avec Firebug la plupart du temps, le script est de revenir à 200 (ce Qui signifie que le script est une nouvelle copie) et un à peut-être 20 ou 30 fois il va revenir 304 (sens il a utilisé une version mise en cache). Pourquoi est-il d'obtenir une nouvelle copie de la grande majorité du temps?
$.ajaxSetup({
cache: true
});
$.getScript( scriptFile );
Les fichiers que getScript récupère n'ont pas été modifiés et les demandes sont d'un changement de page à part.
- est-il cohérent de différence entre rafraîchissement des réponses et actualisation régulière des réponses?
- Bonne observation. Je voudrais créer un jsfiddle et fichier un défaut à bugs.jquery.com/newticket
- Est l'URL de changer entre les demandes? Avez-vous essayé d'affichage du cache en-têtes de contrôle de l'URL qui est en cours de téléchargement?
- Chrome affiche un code de réponse de 200, même quand il note également une opération comme étant satisfait "de la mémoire cache".
- Firebug est firefox, pas de chrome. L'URL ne change pas entre les demandes.
- Je sais ce que Firebug est. Mon point est qu'en supposant qu'une réponse 200 signifie que le cache a été contournée peut ne pas être correcte. Vous pouvez utiliser un renifleur de paquets pour voir si il y a effectivement un HTTP objet de la demande. Pas aussi exactement ce qui se passe dépend du cache-control en-têtes envoyés par le site sur la demande d'origine.
- Votre question ne peut pas recevoir un décent réponse jusqu'à ce que vous postez la réponse http en-têtes de votre serveur envoie pour
scriptFile
. - Pointu, merci de laisser une réponse disant que c'est un bug dans chrome et vous pouvez ajouter de moi que ses AUSSI un bug dans firefox, il vous dira que c'est PAS de cache quand il en fait.
Vous devez vous connecter pour publier un commentaire.
D'abord, permet de clarifier ce que l'on signifie que le jQuery désactive la mise en cache.
Lorsque jQuery désactive le cache est signifie que est de forcer le fichier à charger à nouveau par le navigateur avec un certain genre de truc, par exemple, par l'ajout d'un nombre aléatoire en tant que paramètre à la fin de l'url.
Lorsque jQuery avoir activer le cache, est pas la force de rien et laissez le cache que vous avez mis sur l'en-tête de ce fichier. Ce qui signifie que si vous n'avez pas défini sur l'en-tête des fichiers de paramètres pour la garder sur le cache du navigateur, le navigateur va essayer de le charger à nouveau par certaines méthodes.
De manière à activer le cache en jQuery, vous devez également avoir été réglez les en-têtes de cache sur vos fichiers statiques à garder sur le cache du navigateur, ou d'autre navigateur peut essayer de les charger à nouveau.
Pour les fichiers que le navigateur voir la date de création d'en-tête, puis se connecter au serveur en demandant l'en-tête de nouveau, est de comparer et si c'est pas le changement n'est donc pas de le charger à nouveau, mais c'est de faire un appel vers le serveur.
Pour les fichiers que vous avez mis de l'un max d'âge, et de ne pas demander au serveur jusqu'à cette date, alors que le navigateur est directe de la charge dans le cache, s'il la trouve.
Pour résumer:
Le
cache:true
est de laisser le navigateur décider pour le cache de ce fichier à partir de l'en-tête que vous envoyez.Le
cache:false
est de forcer le fichier à charger de nouveau.Certains par rapport à cache questions:
la mise en cache des fichiers JavaScript
IIS7 Cache-Control
Lle dans le code
Le
getScript()
est l'appel de lajQuery.get()
sorcière est un abréviation fonction Ajax deEn appelant la
getScript()
vous faire un appel ajax et jQuery n'a pas garder tout type de cache vos fichiers si c'est ce que vous pensez à la première place.Fonction personnalisée pour charger les sripts
Si vous n'avez pas gagné pour faire un cache global:c'est vrai, et vous avez seulement besoin de quelques fichiers à être chargé avec cache:c'est vrai, vous pouvez faire une fonction personnalisée que:
Ce n'est pas affectée par le cache global paramètre et est de charger le script de fichiers avec l'ajout de quelque chose de non-cache paramètres à la fin.
getScriptCcd
comme je l'ai taper, vous obtenez la meilleure cache ? vous pouvez également voir si votre dossier contient plus de nombre aléatoire des paramètres à la fin ? si oui, alors ils ne sont pas mis en cache.?timestamp
ajoutés les uns dans le navigateur de la consoleIl y a une erreur que de la date de cette question a été posté, où à la fois Firefox et Chrome état qu'un script n'est pas chargé à partir du Cache lorsqu'il est en effet. À compter de la date de cette réponse à ce problème existe toujours. Le moyen le plus facile à tester et à utiliser la console.journal et d'envoyer un numéro de version.
Cache un script chargés dynamiquement il fait simplement en utilisant le code suivant.
Pour le développement que vous devriez commentaire de cache: vrai.
Je sais que c'est un vieux post, et la réponse est la vraie réponse, mais en touchant sur l'Iscariote le souci C'EST VRAIMENT la mise en CACHE (au moins un peu sorta). C'est juste un caprice de firefox. Peut-être que ce sera utile à d'autres qui sont confus par ce caprice.
J'ai testé ce concept avec un très GROS fichier javascript qui définit google map polygones pour l'Idaho DOT limites du district basée sur des tableaux de dizaines de milliers de latlons (la taille de fichier décompressé est 2,806,257, mais je le lancer à travers un processus de compression). En utilisant le code javascript suivant
et vous pouvez voir les php (vous ne voulez pas le réel Districts.js fichier il prendrait trop de place sur ce post, voici donc ScriptMaster.php)
Il est important de noter que l'appel de php en-tête de fonctions AVANT que le script exécute la même chaîne de caractères que vous avez l'impression que contrairement à chrome et peut-être (sans doute, je suis trop paresseux pour vérifier) les autres navigateurs firefox semble faire un ping vers le serveur pour vérifier les en-têtes avant à l'aide de cache. Peut-être avec plus de recherche, vous pouvez déterminer si ceci se rapporte à des éléments, tout comme il le fait avec ajax (probablement pas).
Donc je n'ai cinq séries de tests montrant le temps de charge pour ce script avec l'ajax comme indiqué dans firebug. Voici les résultats
Comme vous pouvez le voir, mon localhost serveur web de connexion du client n'est pas la plus cohérente et mon ordinateur portable spécifications sont un peu minable (processeur simple core et tous, il y a quelques années trop vieux), MAIS LE POINT est qu'il existe une significative baisse du temps de chargement une fois que le cache est chargé.
[Aussi dans le cas où quelqu'un de curieux, sans la compression de script (pas comme les onglets, d'espaces ou de nouvelles lignes sont gaspillées, il a juste à être lisible encore) prend quelque part entre 7-8 secondes à charger, mais je ne vais pas le faire cinq fois]
Donc n'ayez pas peur, c'est vraiment la mise en cache. Pour les plus petits scripts qui prennent seulement les états membres à charge, vous pouvez ne pas remarquer la différence dans firefox, en toute honnêteté, tout simplement parce qu'il vérifie pour les en-têtes du serveur. Je le sais parce que le temps de chargement de changer de déplacement de ceux d'en-tête de fonctions à partir de la fin du script pour le départ. Si vous avez ces fonctions php passe par la chaîne, il prend plus de temps à charger.
Espérons que cette aide!
jQuery doc site a une belle extension pour ne pas ajouter un horodatage à la demande et de contournement du cache:
Source
Il y a un mieux, en option, vous pouvez activer la mise en cache pour certaines demandes, par exemple:
Ce qui ne vous sont peut-être à la recherche d'un
getScriptOnce
fonction, qui, fondamentalement, si elle sait que le fichier a déjà été chargé avec succès, ne se charge pas de nouveau fichier lorsque la fonction est appelée.J'ai écrit cette fonction. Vous pouvez tester avec la onglet Réseau dans Firebug ou Chrome dev tools. Ceci seulement en charge le même fichier à la fois. Vous avez juste besoin de copier vos fichiers
getScriptOnce
fonction et le tableau globalScriptArray
JS:
HTML: