1

我刚刚将我的 Ruby On Rails 应用程序之一投入生产,并注意到它的加载时间真的很慢。

我的应用程序使用 apache 服务器上的乘客在 railsplayground.net 上运行。

我查看了几个站点,包括:pingdomwebpagetest 和我在我的应用程序中注意到的主要缺点是缓存不适用于我的 javascript 和 css 文件,如下所示: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我已经尝试阅读有关如何缓存的各种指南,但我所有的努力都没有结果。

我把它放在我的头文件中:

  <meta http-equiv="cache-control" content="public" />
  <meta http-equiv="last-modified" content="Sun, 23 Sep 2012 08:00:00 GMT" />

这在我的production.rb中打开:

config.action_controller.perform_caching = true
4

1 回答 1

4

这些项目抱怨的是,当您提供静态资产(图像、css、javascript)时,网络服务器没有告诉浏览器它们是可缓存的,因此它们会被重新获取而不是必要的频率。

当使用资产管道(如您所见)时,资产文件名包含其内容的 md5 校验和,因此您可以设置非常长的到期时间:如果您更改文件,则校验和将更改为,因此文件浏览器请求将具有一个不同的名字。

您通常在 apache 的配置中执行此操作,方法是将类似这样的内容粘贴到虚拟主机的块中

<Location /assets>
      ExpiresActive on
      ExpiresDefault "access plus 1000 days"
</Location>

打开 javascript 和 css 文件的 gzip 压缩也是值得的,这可以节省大量时间。您可以通过向虚拟主机添加类似的内容来做到这一点:

<Location />
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/css  application/javascript application/json text/javascript
</Location>

较旧的浏览器可能不支持这个,但是这个支持非常广泛,所以我系统地打开了这个(给你一个想法,即使 IE 4 和 Netscape Navigator 4 也支持这个)

于 2012-09-23T15:10:18.860 回答