web-dev-qa-db-fra.com

Expire et CDNS - Problèmes YSlow

Permettez-moi d'abord de mentionner que j'ai fait quelques recherches, mais je n'arrive pas à trouver une bonne réponse à ce que je vais chercher.

Je travaille sur un site où j'utilise quelques ressources externes:

Utiliser un réseau de diffusion de contenu (CDN)

Je reçois une note "F" sur "Utiliser un réseau de distribution de contenu (CDN)". Un autre SO Post liens vers le YSlow FAQ ( lien direct ) mais cela semble indiquer que je dois définir mes CDN sur mon navigateur, ce qui semble être une solution rapide pour moi, mais cela ne résout pas le problème sur d'autres navigateurs et/ou appareils.

Ajouter des en-têtes expirés

En ce qui concerne la note "Ajouter des en-têtes Expires", je reçois un E. Le problème est que c'est ce que je reçois:

There are 3 static components without a far-future expiration date.

(2014/2/26) http://fonts.googleapis.com/css?...
(2014/2/26) http://www.google-analytics.com/analytics.js
(2014/2/26) http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js

Comment pourrais-je y remédier? Mes fichiers locaux sont tous pris en charge par mon .htaccess comme indiqué, ici:

AddType image/x-icon .ico

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/ico "access plus 1 year"
ExpiresDefault "access plus 7 days"

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
    # access plus 1 year
    Header set Cache-Control "max-age=31536000"
</FilesMatch>

Cette SO post semble suggérer que c'est soit impossible, soit j'appelle un script local où j'utilise ma bande passante pour charger (et mettre en cache) les fichiers externes requis.

Donc, avec ces choses à l'esprit, voici ce que je regarde:

  1. Les ressources externes doivent être des CDN, mais YSlow lit mes préférences locales qui varient d'un utilisateur à l'autre, j'ai donc besoin d'une alternative au about:config solution proposée par le site officiel YSlow.
  2. Les expirations sont définies par le serveur où se trouve le fichier, donc je ne semble pas avoir accès à la définition de ses valeurs d'expiration. Donc, d'après ce que je comprends, je pourrais transporter ces fichiers sur mon serveur ou utiliser un fichier local PHP et cache à partir dudit fichier PHP fichier localisé mon serveur, mais cela ne semble pas optimal. Y a-t-il un moyen de contourner cela?
14
davewoodhall

Réponse courte:

Vous ne pouvez pas contrôler beaucoup lorsque vous chargez des ressources à partir de serveurs externes comme celui-ci, mais cela peut toujours convenir à votre site. Lorsque vous utilisez un outil comme YSlow, il est important de ne pas vous laisser entraîner dans une note "A" pour tout. Il est préférable de comprendre les indices que l'outil vous donne et de prendre des décisions en conséquence.

Des réponses plus longues:

Réseau de diffusion de contenu

YSlow signalera des notes inférieures pour tous les domaines qu'il ne reconnaît pas comme CDN. Vous pouvez ajouter des noms d'hôtes CDN , alors cela reflètera une meilleure note. J'ajouterais fonts.googleapis.com Et ajax.googleapis.com Car les deux se comportent comme des CDN. Considérez-le comme la sauvegarde d'une préférence dans votre copie de YSlow. L'ajout de domaines ici ne change pas réellement vos performances, il améliore simplement votre score.

Expire les en-têtes

Vous ne pouvez pas contrôler les en-têtes expirés pour le contenu que vous chargez à partir d'un autre site. Options que vous pourriez envisager:

  1. Continuez à utiliser des sites externes; dans ce cas, ils se comportent assez bien et vos performances seront probablement assez bonnes. Ignorez simplement la faible note que YSlow vous donne.
  2. Hébergez vos polices et fichiers jQuery localement, puis définissez les en-têtes expires de far-futures comme vous l'avez montré dans votre .htaccess. Cela vous donnerait une meilleure note YSlow, mais les performances réelles peuvent être pires si votre serveur est plus lent que les CDN. (voir ceci question SO )
  3. Utilisez des sites externes mais ajustez votre URL; dans le cas de jQuery, si vous spécifiez à un niveau de version plus élevé (1.8.0 au lieu de 1.8), vous obtiendrez un en-tête expirant très loin (voir ceci question SO )
39
BrianC