首先让我提一下,我已经做了一些挖掘,但似乎找不到合适的答案
我在一个网站上工作,我正在使用一些外部资源:
- 谷歌分析(http://www.Google-Analytics.com/analytic.js)
- 最新jQuery版本(http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js)
- 谷歌字体(http://fonts.googleapis.com/css?family=Lato:400,300)
使用内容交付网络(CDN)
我在"使用内容交付网络(CDN)"上得了"F"级。另一个SO Post链接到YSlow常见问题解答(直接链接),但这似乎表明我需要在浏览器上定义CDN,这对我来说似乎是一个快速解决方案,但这并不能解决其他浏览器和/或设备上的问题。
添加过期标头
至于"添加过期邮件头"的分数,我得到了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
我该如何纠正这一点?我的本地文件都由我的.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>
这篇SO文章似乎表明这要么是不可能的,要么我调用了一个本地脚本,在那里我使用带宽加载(和缓存)所需的外部文件。
因此,考虑到这些事情,以下是我所关注的:
- 外部资源应该是CDN的,但YSlow读取我的本地偏好,这将因用户而异,因此我需要YSlow官方网站提出的
about:config
解决方案的替代方案 - 过期时间是由文件所在的服务器设置的,所以我似乎没有权限定义它的过期值。因此,根据我收集的信息,我可以将这些文件携带到我的服务器或上,使用本地PHP文件并从位于我的服务器的PHP文件中缓存,但这似乎不是最佳的。有办法绕过这个吗
简短回答:
当你从这样的外部服务器加载资源时,你无法控制太多,但这对你的网站来说可能仍然可以。当使用像YSlow这样的工具时,重要的是不要在所有方面都被评为"a"。最好了解该工具给你的提示,并做出相应的决定。
更长的答案:
内容交付网络
YSlow将报告其未识别为CDN的任何域的较低级别。你可以添加CDN主机名,这样会反映出更好的等级。我将添加fonts.googleapis.com
和ajax.googleapis.com
,因为它们的行为都类似于CDN。可以把它看作是在YSlow的副本中保存一个偏好。在这里添加域实际上并不会改变你的表现,它只是提高了你的分数。
使标头过期
您无法控制从其他网站加载的内容的过期标头。您可以考虑的选项:
- 继续使用外部站点;在这种情况下,这些都表现得很好,你的表现可能会很好。忽略YSlow给你的低分
- 在本地托管您的字体和jQuery文件,然后如
.htaccess
中所示设置远期到期标头。这会给你一个更好的YSlow等级,但如果你的服务器比CDN慢,实际性能可能会更差。(请参阅此SO问题) - 使用外部网站,但调整您的URL;在jQuery的情况下,如果您在更高的版本级别(1.8.0而不是1.8)上指定,您将获得一个遥远的未来过期标头(请参阅这个SO问题)