web-dev-qa-db-fra.com

Pourquoi Chrome consacre-t-il du temps à "télécharger" du contenu à partir de la mémoire cache?

Je sers du contenu statique destiné à être mis en cache par le navigateur indéfiniment. Chrome le cache comme prévu, mais passe toujours du temps à le "télécharger". J'utilise Chrome 46.0.2490.71.

 Chrome Network Tab

Comme vous pouvez le constater, le contenu est servi à partir du cache, mais le téléchargement du contenu prend toujours 68 ms. Cela provoque le clignotement des images svg lors du chargement de la page chaque, même si le fichier est mis en cache.

Voici les informations de scénario pertinentes d'un chargement de page en mode navigation privée:

 Chrome Timeline Tab

Les champs "Durée totale" et "Durée de l'événement" pour chacun de ces événements sont nuls. En répliquant cela avec le fichier servi localement (mais toujours à partir du cache), l'événement "Receive Data" n'est vu qu'une seule fois.

Quelques points intéressants à noter:

  • Le traitement du même fichier à partir de mon ordinateur local, avec le même encodage, ne produit pas le même délai de téléchargement.
  • Le passage en mode navigation privée (sans extensions) réduit de moitié le délai de téléchargement, mais ne l'élimine pas.
  • Il est plus rapide d’actualiser la page, car il semble prendre moins de temps de recevoir une réponse 304 du serveur que de simplement la charger à partir de la mémoire cache.
  • Fermer les outils de développement ne semble pas avoir d’effet sur le délai.
  • IE 11, Edge et Firefox 41 ne montrent aucun délai.

Quelles causes possibles pourrait-il y avoir?

37
dlras2

Cela a donc à voir avec le fonctionnement de la mise en cache dans Chrome. Je n'ai pas d'expérience personnelle avec le code de base de Chrome, mais j'en connais un peu la théorie. (J'ai également trouvé ici une référence à l'implémentation du cache de Chrome pour les plus curieux: cache disque chrome )

Pour référence, voici une capture d'écran de mon chargement de votre question de dépassement de capacité dans Chrome lorsque le panneau Réseau est ouvert et que l'option Limitation du réseau est définie sur "Hors ligne". Notez que chaque entrée de cette liste provient du cache!

Imgur screencap

Vous remarquerez également que Chrome passe du temps à "télécharger" tous les fichiers. Pourquoi est-ce? Eh bien, le cache de Chrome est une base de données, et cette base de données est également compressée pour économiser de l'espace. Lorsque vous récupérez un document à partir de la mémoire cache, le prix de cette récupération n'est pas nul. Chrome doit rechercher l'élément dans la base de données de cache, puis gonfler cette entrée dans la mémoire pour que Chrome puisse l'utiliser. Je ne connais pas les détails exacts de la façon dont le panneau Réseau chrome-dev-tools affiche les heures, mais je suppose que récupérer ce fichier à partir du disque, le décompresser, puis analyser et utiliser le résultat correspond à ce que vous voyez. reflété dans "Temps téléchargé".

Je ne peux pas dire pourquoi d'autres navigateurs n'ont pas ce délai, car je n'ai pas beaucoup d'expérience avec eux. Il se peut qu’ils utilisent une méthode plus efficace pour extraire des éléments du cache (possible), ou qu’ils gardent le cache en mémoire à tout moment (improbable) ou qu’ils omettent certaines des vérifications de l’intégrité. Chrome rend les données en cache (possible)

13
MaxML

Je suis tombé sur le même problème. J'ai mis en œuvre la fonctionnalité de téléchargement PDF. En cliquant sur le lien de téléchargement, la réponse a pris environ 260 ms, mais le téléchargement commence après 10 secondes sur Chrome.

FIX: - J'ai analysé que mon système Windows était en 64 bits et mon chrome en 32 bits. Après la mise à niveau de la version 64 bits de chrome, le problème était résolu .. J'ai trouvé une solution à l'adresse suivante: https://bugs.chromium.org/p/chromium/issues/detail?id=103737

2
Shahzad

Lorsque je passe l'en-tête ("Content-Length: xxx"), il se charge 100% plus vite!

0
Martin Zvarík

J'ai rencontré un "problème" similaire. Cependant, le décalage inattendu a disparu une fois que j'ai chargé ma page (avec ses dépendances "lent à récupérer à partir du cache disque") dans une fenêtre de navigation privée avec DevTools fermé. Cela me suggère que le problème était dû à des interférences provenant d'une extension Chrome ou de la fenêtre de DevTools.

0
Nate

J'ai eu le même problème, le téléchargement depuis le cache a pris une éternité ... Le problème était que mon fichier avait une taille de gzip de 410 Ko (ce qui est déjà énorme) Décompressé il a une taille de 1,5 Go, donc le navigateur utilisé tellement de temps pour le charger à partir du cache puis le décompresser.

Avec les derniers outils de développement chromés, vous voyez également la taille décompressée:  With the lastest chrome dev tools you see the unzipped size as well

0
Stef Chäser