8

因此,我刚刚为 firebug 下载了 yslow,并查看了我正在构建的站点的结果。

我看到了一些建议,例如,为我的静态组件使用 ETags、无 cookie 域,并添加过期标头。

我在想,好吧,我可以去解决这些问题,但我更有可能首先做一些其他优化,例如缓存来自数据库调用的结果或类似的东西。

我认为这个网站不会得到“那么多”的使用来保证 YSlow 的建议。

我知道你永远不应该在你知道你需要优化之前进行优化,但我认为像 ETags 和 expires headers 这样的东西肯定只会在流量非常大的网站上发挥作用。

例如,如果我编写了一个糟糕的实现,每个请求对数据库进行 5 次(相对较小)调用,并且 YSlow 告诉我我的 14 个图像不在无 cookie 的域上,那么这两个优化中的哪一个应该先解决?

4

7 回答 7

5

在没有 YSlow 我们的 .htaccess 大师。但我最近建立了一个 Joomla 网站并使用 YSlow 来寻找改进的地方。您在上面询问的 YSlow 的两个区域——“添加过期标头”和“配置实体标签 (ETags)”——我通过域根目录上的 .htaccess 文件进行了处理。

添加过期标头

雅虎说:“网页变得越来越复杂,上面有更多的脚本、样式表、图像和 Flash。第一次访问一个页面可能需要几个 HTTP 请求来加载所有组件。通过使用 Expires 标头,这些组件变成可缓存,可避免后续页面视图中不必要的 HTTP 请求。Expires 标头通常与图像相关联,但它们可以而且应该用于所有页面组件,包括脚本、样式表和 Flash。”

为了解决这个问题,我找到了以下代码块并将其添加到我的 .htaccess 文件中(注意:将 OPENANGLEBRACKET 更改为“<”,将 CLOSEDANGLEBRACKET 更改为“>”):


    ########## Begin - Expires Headers
    #
    OPENANGLEBRACKET IfModule mod_expires.c CLOSEDANGLEBRACKET 
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 week"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/ico "access plus 1 month" 
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 month"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType text/html "access plus 1 day"
    ExpiresByType text/plain "access plus 1 week"
    ExpiresByType video/x-flv "access plus 1 month"
    OPENANGLEBRACKET /IfModule CLOSEDANGLEBRACKET
    #
    ########## End - Joomla! core SEF Section

配置实体标签 (ETags)

雅虎说:“实体标签(ETags)是一种机制网络服务器和浏览器用来确定浏览器缓存中的组件是否与源服务器上的组件匹配。由于 ETags 通常是使用属性构建的,这些属性使它们对特定的服务器托管是唯一的一个站点,当浏览器从一个服务器获取原始组件并随后尝试在另一台服务器上验证该组件时,标签将不匹配。”

我决定通过将其添加到我的 .htaccess 文件中来删除所有给我 A 级的 Etag:


    ########## Begin - Remove Etags
    #
    FileETag none
    #
    ########## End - Remove Etags

对我的 .htaccess 文件的这两项更改为我提供了这两个 YSlow 类别的 A 成绩。

于 2009-09-16T13:36:33.107 回答
4

YSlow 可以很好地检查您的用户所看到的“用户体验”。它的建议是帮助使页面看起来加载得更快。例如 14 图像到 1 图像和精灵纯粹是视觉上的事情。规则是因为浏览器在任何时候只能并行下载几张图片。

我总是首先解决后端优化问题,因为它们可以帮助您使您的网站具有可扩展性,如果它变得那么大的话。

于 2009-07-17T10:07:45.680 回答
4

修复您的分析报告中导致页面浏览量最慢的任何一个。

请记住,无论您修复 YSlow 所抱怨的问题,都可能在以后提供帮助,而无需您再次执行,而数据库优化将是一项持续的任务。

即,如果您将图像拆分到多个域并使其无cookie,那么当您添加更多图像时,它们应该在这些域中拆分(希望是自动的),并且不再需要努力。

此外,Expires 标头会导致服务器上的请求级别较低(因为可以缓存响应),这将加快每个人的访问速度

于 2009-07-17T10:14:25.057 回答
2

请记住,YSlow 无法看到您的后端代码,因此它只能根据浏览器与您网站的交互来提供建议。您当然应该首先修复您的数据库调用。YSlow 关于多个请求、gzip 等的建议非常可靠,但它永远告诉我使用内容交付网络——这对于小型站点来说毫无意义。只是不要盲目地在每个推荐上花费大量时间/金钱,并考虑您所知道的而 YSlow 不知道的因素。

于 2009-07-17T10:15:16.617 回答
1

您是非常正确的,在应用程序代码中进行优化,例如

  • 优化慢速数据库查询
  • 缓存频繁执行的查询
  • 常用组件的组件级缓存
  • 昂贵的应用程序代码的一般速度优化

在大多数情况下,它会给您带来比 YSlow 建议更高的性能提升。

YSlow 优化通常用于提高站点静态部分的性能,在进行任何调整之前,静态部分的性能通常已经优于动态部分。

于 2009-07-17T09:47:29.543 回答
1

请不要对的静态内容使用 cookie 和 Expires。

它不仅能帮助你,还能帮助

我在家里使用较慢的 Internet 链接,144 Kbps。我经常将其加载到容量,下载更新或视频文件。这使得它的延迟上升到 800 毫秒左右。

需要大量往返以进行 If-Modified-Since 时间检查的网站加载速度非常慢。使用 Expires 的站点可以快速正确加载,因为只有动态内容必须实际加载。

于 2009-09-16T13:56:18.930 回答
0

后端代码通常比前端代码更快。尽量减少外部资源(css 背景图像、css 文件和 javascript 文件)的数量。

恕我直言,这将是最关键的优化。

于 2009-07-17T10:01:39.937 回答