快速业务通道

真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

真实世界中的Rails,第2部分: 高级页面缓存

时间:2011-11-20 Bruce Tate

使用 JavaScript 和 cookies 扩展页面缓存

简介:通常,与用户相关的内容不适于使用页面缓存,原因是针对每个用户的内容会有细微的不同。 通过 JavaScript 和 cookies,甚至可以在显示某些自定义用户数据时采用页面缓存。本文将研究 Ruby on Rails 中的高级页面缓存。

有了页面缓存,Rails 就可以不再介入。在某种程度上,这是件好事 ,因为您的确可以获得优秀的性能。Rails 只需创建 HTML 页面,将其放入目录,之后,就可以置之于脑 后。从那时起,就由应用服务器管理这些页面,且页面进入应用服务器无需任何循环。从性能的角度而言 ,页面缓存真是天赐之福。

我也钟爱页面缓存,Rails 使之简单利落。只需使用一行代码就可以 启用缓存。如果再加入一些代码,就能通过简单地删除文件操作或使用 Rails 较高层的 API 终止缓存。 这里存在一个问题。并不是每个网站都能使用页面缓存。如果页面上的数据会根据访问它的用户而改变, 那么就不能进行页面缓存。而且,如果很难判断页面何时到期终止,就会发现页面缓存的要求太过苛刻。

比如,几乎在每个页面上,ChangingThePresent.org(参阅 侧栏)都有某些用户数据是根据当前 登录的用户而变化的。图 1 显示了我们最新主页的一部分。(我们一直在努力完善它,所以它有可能会 改变。)这个页面呈现出的问题相对简单。如果能判断用户是否已经登录,就可以用 Flash、JavaScript 、DHTML 或任何其他基于浏览器的代码动态定制视图。您会发现已登录的用户可以登出系统或查看其配置 文件,而已登出的用户则可以注册或再次登录。

图 1. ChangingThePresent.org 上的登录和登出 视图

真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网

真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网

真实世界中的Rails,第2部分: 高级页面缓存(2)

时间:2011-11-20 Bruce Tate

图 2 显示了稍微有些高级的用户数据视图,我们的站点就使用了这个视图。图 2 中的两个视图有极大的不 同。为了处理页面缓存,我必须先解决所有的差异。对于每个已登录的用户,我都必须替换掉页面的登出 内容,使之显示登录用户的登录 ID 和用户图片。缓存这些内容会带来另一层面的挑战,因为每个用户的 数据都不尽相同。

图 2. 两个截然不同的视图

真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网

这种情况并非 ChangingThePresent.org 所独有。如果需要个性化用户体验,那么不可修改的 Rails 页面缓存的使用就 会受到限制。但如果定制不多,那么实际上还是能很容易地缓存这些页面的。

解决这些问题的方 法很多。我更倾向于使用如下这些技巧:

在 Rails 框架的约束之内,取消页面缓存并使用段缓 存替代它。

先加载页面的大部分,然后使用 JavaScript 和 Ajax 加载该页面较小的动态部分。 服务器端代码可以检测用户是否登录,然后用 Ajax 呈现合适的部分。

将某些用户状态(比如用 户是否已登录)存储在客户端的 cookie 中。然后,根据 cookie 的内容,使用 JavaScript 动态更改页 面的外观。

在这三种技巧中,我更喜欢第三种,因为第一和第二种技巧都会将 Rails 应用程序 牵扯进来。要获得最大限度的可伸缩性,就要尽量多地使用静态内容。在本文中,我会侧重于介绍第三种 方式。请不要使用该方法存储任何不能丢失的敏感数据,比如 ICBM 启动代码或信用卡号。对于我们所处 理的这些有限的数据而言,这种方法效果很好。

真实世界中的Rails,第2部分: 高级页面缓存(3)

时间:2011-11-20 Bruce Tate

使用 Show and tell 还是 hide and seek?

在我刚开始试着缓存这个主页时,我本可以简单地用 JavaScript 替换这些链接。可以将这种技 巧看成是 Show-and-tell。基于我们对已登录用户的了解,可以使用 JavaScript 选择性地替换或注入 Web 页的部分内容,从而为用户提供

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号