web-dev-qa-db-fra.com

Les navigateurs reconnaissent-ils les mêmes fichiers servis par différents sous-domaines?

Les ressources de mon site Web sont stockées sur Amazon S3 et servies par CloudFront, à partir d'un nom de domaine distinct, pour servir de domaine sans cookie (donc website.com pour le site Web et websitestatic.com pour les actifs statiques). Je mets un en-tête très en avance Expires, afin qu'ils puissent être mis en cache par le navigateur.

Google PageSpeed ​​recommande: Parallelize downloads across hostnames. Je peux y parvenir en ajoutant des sous-domaines pointant vers la même distribution CloudFront, puis en sélectionnant au hasard l'URL de mes actifs, afin que je puisse avoir media1.websitestatic.com, media2.websitestatic.com, media3.websitestatic.com.

Ma question est la suivante: les navigateurs reconnaîtront-ils les fichiers individuels comme étant identiques aux fichiers pré-cachés, s'ils sont servis à partir de sous-domaines différents? Comme media1, media2, etc ... servent tous les mêmes fichiers, si plus de deux demandes de page ont été servies la même image à partir de media1 en premier, puis media2 ensuite, un navigateur le reconnaîtra-t-il ou le téléchargera-t-il à nouveau?

Je peux randomiser l'URL du sous-domaine dans les fichiers HTML qui servent le fichier (media1, media4, media8, etc ...), mais je ne peux pas stocker ce nombre aléatoire de manière particulière. fichier afin qu’il soit servi chaque fois du même sous-domaine.

J'imagine que la réponse est non, ils ne le feront pas. Si j'implémentais des sous-domaines aléatoires, je nierais l'avantage de disposer d'une version en cache. En théorie, chaque demande de page vous permet d'obtenir un sous-domaine différent pour le même fichier. .

4
Jim

les navigateurs reconnaîtront-ils les fichiers individuels comme étant identiques aux fichiers pré-mis en cache, s'ils sont servis à partir de sous-domaines différents?

Non. Deux fichiers identiques servis à des emplacements différents sont des fichiers différents en ce qui concerne le navigateur (cache).

L'URL est la clé par laquelle le fichier est mis en cache par le navigateur.

En tant que media1, media2, etc. servent tous les mêmes fichiers, si sur deux pages, la même image a été servie par media1, puis par media2, un navigateur le reconnaîtra-t-il ou le téléchargera-t-il à nouveau?

Il sera téléchargé à nouveau.

6
MrWhite

Le navigateur n'a aucun moyen de savoir que deux URL distinctes sont le même fichier.

Je pense que la question sous-jacente qui vous reste est la suivante: comment héberger mes fichiers sur plusieurs domaines sans obtenir autant de téléchargements qu'il y a de domaines (wow. Est-ce anglais? Désolé je suis français)

Vous pouvez gérer cela en choisissant judicieusement la provenance de vos fichiers. Deux méthodes communes:

  • Utilisez un algorithme déterministe pour choisir le domaine à sélectionner (c’est-à-dire qu’il n’y ait aucune aléatoire). Par exemple, "tout le JS passe à 1, tout le CSS à 2, tout le reste à 3" ou "tous les fichiers commençant par un 'a' allez à 1, 'b' 2, 'c' 3, 'd' 4 ...

  • Plus difficile, mais toujours faisable dans toutes les langues que je connais: Faites un sharding cohérent. Prenez l'URL, lui appliquez MD5 (ou SHA1 ou toute autre bonne fonction de hachage), transformez-le en un nombre entier, prenez-le modulo avec le nombre de domaines que vous avez. Exemple: "/wp-content/photos/2013/01/cat.jpg" MD5-hashes to 25d81ba602071aa70398dfaa452322d, qui convertit en un nombre entier 5030353273030303030303030. 0.

Avec les deux solutions, vous allez répartir vos fichiers, mais chacun passe à un seul domaine. La deuxième solution est préférable lorsque les noms de fichiers sont bien structurés, car ils garantissent une distribution uniforme, alors que la première solution est plus rapide, plus simple, mais peut envoyer toutes les images d’un domaine et ne pas vous permettre d’améliorer vos performances.

1
mathieubolla