Comment ne vous cache une image en Javascript
Mes amis et moi-même travaillons sur un site web où nous aimerions nous cache certaines images afin de les afficher plus rapidement à l'avenir. J'ai deux questions principales:
- Comment ne vous cache une image?
- Comment utilisez-vous une image une fois qu'il a été mis en cache? (et juste pour vérifier, si une image est mis en cache sur Une page, il est possible d'appeler à partir du cache de l'utiliser sur la page B, à droite?),
Aussi, est-il possible de quand la version en cache de l'image expirera?
Il serait apprécié si un exemple et/ou un lien vers une page qui décrit cette nouvelle a été inclus.
Nous sommes très bien à l'aide de crue Javascript ou jQuery version.
- Vous n'avez pas. Le navigateur n'.
- ne le cache du navigateur automatiquement les images?
- Oui, le navigateur met en cache les images automatiquement, à condition que votre serveur envoie les en-têtes nécessaires pour indiquer au navigateur qu'il est sûr de les mettre en cache. (Ces en-têtes peuvent également indiquer au navigateur que le délai d'expiration, qui est partie de votre question.)
- comment puis-je vérifier que mon navigateur est d'envoyer de l'entête nécessaire?
- Vous pouvez vérifier les en-Têtes de Réponse dans la section Réseau de vos navigateurs outils de dev.
Vous devez vous connecter pour publier un commentaire.
Une fois qu'une image a été chargé dans n'importe quel chemin dans le navigateur, il sera dans le cache du navigateur et se chargent beaucoup plus rapidement la prochaine fois qu'il est utilisé si cette utilisation est dans la page en cours ou à toute autre page tant que l'image est utilisée avant l'expiration de la mémoire cache du navigateur.
Donc, préalablement mis en cache pour les images, tout ce que vous avez à faire est de les charger dans le navigateur. Si vous souhaitez préalablement mis en cache un tas d'images, il est probablement préférable de le faire avec du javascript, il n'est généralement pas tenir jusqu'au chargement de la page lorsque vous avez terminé de javascript. Vous pouvez le faire comme ceci:
Cette fonction peut être appelée autant de fois que vous le souhaitez et à chaque fois, il suffit d'ajouter plus d'images à la préalablement mis en cache.
Une fois que les images ont été préchargés comme ceci grâce à javascript, le navigateur va les avoir dans son cache et vous pouvez tout simplement se référer à la normale Url dans d'autres endroits (dans vos pages web) et le navigateur récupère l'URL de son cache plutôt que sur le réseau.
Finalement au fil du temps, le cache du navigateur peut remplir et de le jeter le plus ancien des choses qui n'ont pas été utilisés depuis un certain temps. Donc finalement, les images ne sont chassées du cache, mais ils devraient y rester pendant un certain temps (en fonction de la taille du cache est et combien d'autres de navigation est fait). Chaque fois que les images sont en fait préchargées de nouveau ou utilisé dans une page web, il actualise leur position dans le cache du navigateur automatiquement de sorte qu'ils sont moins susceptibles d'avoir vidé le cache.
Le cache du navigateur est une page de sorte qu'il fonctionne pour n'importe quelle page chargée dans le navigateur. Ainsi, vous pouvez préalablement mis en cache dans un endroit dans votre site et le cache du navigateur fonctionnera ensuite pour toutes les autres pages de votre site.
Lors de la mise en cache préalable comme ci-dessus, les images sont chargés de manière asynchrone afin de ne pas bloquer le chargement ou l'affichage de votre page. Mais, si votre page comporte de nombreuses images de ses propres, ces préalablement mis en cache les images peuvent être en concurrence pour la bande passante ou des connexions avec les images qui sont affichées dans votre page. Normalement, ce n'est pas un notable de la question, mais sur une connexion lente, cette mise en cache préalable pourrait ralentir le chargement de la page principale. Si c'était OK pour précharger les images à charger dernier, alors vous pouvez utiliser une version de la fonction serait d'attendre pour lancer la rondelle jusqu'à ce qu'après que toutes les autres ressources de la page ont été déjà chargé.
Image()
élément de la liste lorsque l'image finit de se charger. Il est plus sûr d'attendre jusqu'à ce que l'image a fini de charger.comme @Pointu dit que vous n'avez pas la mise en cache des images avec le javascript, le navigateur ne prend que. et c'est peut-être ce que vous demandez et ne peut être... mais vous pouvez précharger les images à l'aide de javascript. En mettant toutes les images que vous souhaitez pour précharger dans un tableau et de mettre toutes les images dans ce tableau cachés les éléments img, vous efficacement la précharge (ou cache) les images.
Il ya quelques choses que vous pouvez regarder:
Pré-chargement de vos images
La fixation d'un délai de cache dans une .fichier htaccess
La taille de fichier des images et de l'encodage base64 eux.
Préchargement:
http://perishablepress.com/3-ways-preload-images-css-javascript-ajax/
La mise en cache:
http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html
Il ya un couple de différentes pensées pour l'encodage base64, certains disent que les requêtes http de la tourbière vers le bas de la bande passante, tandis que d'autres disent que la "perception" de chargement, c'est mieux. Je vais laisser cela en l'air.
J'ai un similaire répondre asynchrones préchargement des images via JS. Charger dynamiquement est la même chose que de les charger normalement. ils seront cache.
que pour la mise en cache, vous ne pouvez pas contrôler le navigateur, mais vous pouvez le régler via un serveur. si vous avez besoin de charger un frais de ressources à la demande, vous pouvez utiliser le cache buster technique à force de charger une nouvelle ressource.
Même si votre question dit "à l'aide de javascript", vous pouvez utiliser le
prefetch
attribut d'une balise de lien pour le chargement d'un actif. De cette écriture (10 Août 2016), il n'est pas pris en charge dans Safari, mais est à peu près partout ailleurs:<link href="(url)">
Plus d'infos sur le soutien de ici:
http://caniuse.com/#search=prefetch
Noter que IE 9 et 10 ne sont pas répertoriés dans la
caniuse
de la matrice parce que Microsoft a cessé le support.Donc, si vous êtes vraiment coincé sur l'utilisation de javascript, vous pouvez utiliser jquery pour ajouter dynamiquement ces éléments à votre page 😉
- Je utiliser une technique similaire pour lazyload images, mais ne peut pas aider mais noter que Javascript n'est pas accéder à la mémoire cache du navigateur au premier chargement.
Mon exemple:
J'ai une rotation de bannière sur ma page d'accueil avec 4 images le curseur attendre 2 secondes, que le javascript charges de l'image suivante, attend 2 secondes, etc.
Ces images ont une url unique qui changent chaque fois que je les modifier, afin qu'ils obtiennent la mise en cache des en-têtes de cache dans le navigateur pour une année.
Maintenant quand j'ouvre Chrome Devtools et assurez-vous de Désactiver le cache " l'option n'est pas active et charger la page pour la première fois (après effacement de la mémoire cache) toutes les images sont d'extraction et d'avoir un état 200. Après un cycle complet de toutes les images dans la bannière du réseau des demandes d'arrêt et de la mise en cache des images sont utilisées.
Maintenant quand je fais régulièrement un rafraîchissement ou d'aller à une sous-page et cliquez sur le dos, les images qui sont dans le cache semble être ignoré. Je m'attends à voir un gris un message "à partir du cache disque" dans l'onglet Réseau de Chrome devtools. À la place, je vois les demandes passent par toutes les deux secondes avec un Vert d'état cercle au lieu de gris, je vois transfert de données en cours, donc j'ai l'impression que le cache n'est pas accessible à tous à partir de javascript. Simplement, il récupère l'image à chaque fois que la page est chargée.
De sorte que chaque demande pour la page d'accueil de déclencheurs 4 demandes quelle que soit la stratégie de mise en cache de l'image.
En considérant ensemble et la nouvelle http2 standard de la plupart des serveurs web et les navigateurs supportent maintenant, je pense que c'est mieux d'arrêter l'utilisation de lazyloading depuis http2 va charger toutes les images presque simultanément.
Si c'est un bug dans Chrome Devtools il est vraiment surprenant de ma personne ne l'a remarqué encore. 😉
Si cela est vrai, à l'aide de lazyloading seulement par une augmentation de l'utilisation de la bande passante.
S'il vous plaît corrigez-moi si je me trompe. 🙂
Oui, le navigateur met en cache les images pour vous, automatiquement.
Toutefois, vous pouvez définir une image cache le point d'expirer. Découvrez ce Débordement de Pile de questions et de réponses:
Expiration De La Mémoire Cache Sur Les Images Statiques
Je préfère toujours utiliser l'exemple mentionné dans Konva JS: les Événements de l'Image pour charger les images.
Vous devez avoir une liste d'Url de l'image en tant qu'objet ou un tableau, par exemple:
var sources = {
lion: '/assets/lion.png',
monkey: '/assets/monkey.png'
};
Définir la définition de la Fonction, où il reçoit la liste des Url de l'image et une fonction de rappel dans ses arguments, donc quand il se termine le chargement de l'image vous pouvez commencer à excution sur votre page web:
JS:
$(document).ready(function (){
loadImages(sources, buildStage);
});