首先我要提到的是,我已经进行了一些挖掘,但似乎找不到我要寻找的内容的正确答案。
我正在开发一个使用一些外部资源的网站:
- 谷歌分析 (//www.google-analytics.com/analytics.js)
- 最新的 jQuery 版本(http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js)
- 谷歌字体(http://fonts.googleapis.com/css?family=Lato:400,300 http://fonts.googleapis.com/css?family=Lato:400,300)
使用内容分发网络 (CDN)
我在“使用内容交付网络 (CDN)”方面获得“F”等级。不同的SO Post https://stackoverflow.com/questions/7030252/yslow-what-does-clicking-add-cdn-doYSlow 常见问题解答链接(直接链接 http://yslow.org/faq/#faq_cdn)但这似乎表明我需要在浏览器上定义我的 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>
This SO post https://stackoverflow.com/questions/1439042/how-can-i-add-expire-headers-for-scripts-that-are-not-on-my-server似乎表明这是不可能的,或者我调用一个本地脚本,在其中使用我的带宽来加载(和缓存)所需的外部文件。
因此,考虑到这些事情,这就是我所关注的:
- 外部资源应该是 CDN,但 YSlow 会读取我的本地偏好,这些偏好会因用户而异,所以我需要一个替代方案
about:config
YSlow官方网站提出的解决方案。
- 过期时间是由文件所在的服务器设置的,所以我似乎无权定义它的过期值。因此,根据我收集的信息,我可以将这些文件传输到我的服务器上or使用本地 PHP 文件并从位于我的服务器的所述 PHP 文件缓存它,但这似乎不是最佳选择。有办法解决这个问题吗?
简短回答:
当您从外部服务器加载资源时,您无法控制太多,但对于您的网站来说可能仍然没问题。当使用像 YSlow 这样的工具时,重要的是不要在所有事情上都陷入“A”级。最好了解该工具为您提供的提示,并做出相应的决策。
较长的答案:
内容交付网络
YSlow 将报告其不识别为 CDN 的任何域的较低等级。你可以添加 CDN 主机名 http://yslow.org/faq/#faq_cdn,那么就会体现出更好的成绩。我想补充一下fonts.googleapis.com
and ajax.googleapis.com
因为两者的行为都类似于 CDN。将其视为在 YSlow 副本中保存首选项。在这里添加域实际上并不会改变您的性能,它只会提高您的分数。
标头过期
您无法控制从其他站点加载的内容的过期标头。您可以考虑的选项:
- 继续使用外部网站;在这种情况下,它们表现得非常好,您的表现可能也会非常好。忽略 YSlow 给你的低分即可。
- 在本地托管您的字体和 jQuery 文件,然后设置远期过期标头,如您在
.htaccess
。这将为您提供更好的 YSlow 等级,但如果您的服务器比 CDN 慢,实际性能可能会更差。 (看这个所以问题 https://stackoverflow.com/questions/15632092/loading-font-from-google-web-fonts-or-fonts-from-own-server-which-one-is-more-e)
- 使用外部网站但调整您的 URL;对于 jQuery,如果您指定更多版本级别(1.8.0 而不是 1.8),您将得到一个遥远的未来过期标头(请参阅此所以问题 https://stackoverflow.com/a/10610590/9965)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)