首页 > 学院 > 开发设计 > 正文

深入理解Ruby on Rails中的缓存机制

2019-10-26 19:26:20
字体:
来源:转载
供稿:网友

几个场景

首先,让我先来带您浏览几个 ChangingThePresent.org 中的页面吧。我将显示站点中几个需要缓存的地方。然后,再指出我们为其中每个地方所做出的选择以及为实现这些页面所使用的代码或策略。尤其会重点讨论如下内容:

    全静态页面     几乎无变化的全动态的页面     动态页面片段     应用程序数据

先来看看静态页面。几乎每个站点都会有静态页面,如图 1 所示,其中还有我们的条款和条件。可以通过单击 register 然后再选择是否接受用户协议来浏览相应页面。对于 ChangingThePresent 而言,我们从此页中删除了所有动态内容以便 Apache 能够对它进行缓存。按照我们 Apache 中配置的规则,这些内容永远都不会由 Rails 服务器生成。因此,我根本无需对其考虑 Rails 缓存。
图 1. 用户协议

2015422163759311.jpg (402×341)

 接下来,再来看看全动态页面。理论上讲,ChangingThePresent 可以有一些动态构建的页面,但是这些页面一般很少变化。由于几乎所有页面都会显示用户是否登录,因此我们并不怎么关注这种缓存。

再下来,看看页面分段缓存。图 2 中所示的主页原来是完全静态的,现在,有一些元素变成了动态的。每天,页面都会显示一系列礼物,这些礼物有的是随机选的,有的则由我们的管理员选定。请注意在标题为 “A Few of our Special Gifts for Mother's Day” 节下的那些礼物,同时也请注意在最右边显示为 “login.” 的那个链接。此链接取决于用户是否登录。我们不能缓存整个页。页面每天只能改变一次。
图 2. 主页

2015422163836768.jpg (572×433)

 最后再考虑应用程序。除非是在 15 年之前进行网络冲浪,否则您现在遇到的有趣站点全部都是动态的。现代的应用程序大都分层,而且可以通过在层间添加缓存来使这些分层更加有效。ChangingThePresent 在数据库层采用了一些缓存。接下来,我将深入讨论不同类型的缓存,还会介绍我们为 ChangingThePresent 都采用了何种缓存。
缓存静态内容

Mongrel 是一种 Web 服务器,由 Zed Shaw 利用 2500 行 Ruby 和 C 编写而成。这个小型的服务器占用内存极少,非常适合 Ruby Web 应用程序,例如 Rails、Nitro、Iowa 等等。Mongrel 可运行于 UNIX? 和 Linux? 上,也可运行在 Win32 上。Mongrel 也经常可以作为代理运行在另一个 Web 服务器(例如 Apache 或 Litespeed)的后端,但这不是必需的 —— 因为 Mongrel 是一种 HTTP 服务器,可以与所有您偏好的 HTTP 工具结合使用。

除了图像之外,有关缓存静态数据的内容,可讲的内容不多。由于我们的网站是一个慈善性质的门户网站,这意味着我们需要更多地关注用户的感受,比如多加入一些图像或视频。但我们的 Web 服务器 Mongrel 并不能很好地服务静态数据,因此我们使用 Apache 来服务图像内容。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表