过期和CDNS - YSlow问题

dav*_*all 14 performance cdn yslow

我首先要提一下,我已经做了一些挖掘,但似乎无法找到我要找的正确答案.

我正在使用一些外部资源的网站上工作:

使用内容分发网络(CDN)

我在"使用内容分发网络(CDN)"上获得了"F"级.一个不同的SO Post链接到YSlow FAQ(直接链接),但这似乎表明我需要在我的浏览器上定义我的CDN,这对我来说似乎是一个快速解决方案,但这并不能解决其他浏览器和/或设备.

添加Expires标头

至于"添加过期标题"等级,我得到了E.问题是,这就是我得到的:

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
Run Code Online (Sandbox Code Playgroud)

我怎么去纠正这个?我的本地文件都由我所照顾,.htaccess如下所示:

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>
Run Code Online (Sandbox Code Playgroud)

这个SO帖子似乎暗示它要么不可能,要么我在本地脚本上调用我用带宽来加载(和缓存)所需的外部文件.

所以,考虑到这些事情,我正在看的是:

  1. 外部资源应该是CDN,但YSlow会读取我的本地偏好,这些偏好因用户而异,所以我需要替代about:configYSlow官方网站提出的解决方案.
  2. Expires由文件所在的服务器设置,因此我似乎无权定义它的到期值.所以,从我收集的内容来看,我可以将这些文件传输到我的服务器上使用本地PHP文件并从位于我的服务器的所述PHP文件中缓存它,但这似乎不是最佳的.有办法解决这个问题吗?

Bri*_*anC 39

简短回答:

当您从这样的外部服务器加载资源时,您无法控制太多,但它可能仍适用于您的站点.当使用像YSlow这样的工具时,重要的是不要陷入所有事情的"A"等级.最好了解工具提供的提示,并做出相应的决策.

更长的答案:

内容分发网络

YSlow将报告其未被识别为CDN的任何域的较低等级.您可以添加CDN主机名,然后它将反映更好的成绩.我会添加fonts.googleapis.com,ajax.googleapis.com因为两者都表现得像CDN.可以将其视为在YSlow副本中保存首选项.在这里添加域实际上并不会改变您的性能,只会提高您的分数.

过期标题

您无法控制从其他网站加载的内容的过期标头.您可以考虑的选项:

  1. 继续使用外部网站; 在这种情况下,这些表现非常好,你的表现可能会非常好.只要忽略YSlow给你的低等级.
  2. 在本地托管您的字体和jQuery文件,然后设置远程期货过期标题,就像您在自己的文章中所示.htaccess.这将为您提供更好的YSlow等级,但如果您的服务器比CDN慢,实际性能可能会更差.(见这个问题)
  3. 使用外部网站但调整您的网址; 在jQuery的情况下,如果您指定更多版本级别(1.8.0而不是1.8),您将获得一个远期未来的过期标题(请参阅此SO问题)