快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
e(/%2 [Ff]/g,"/");   document.getElementById(''member_thumbnail'').alt=login_cookie; }

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

时间:2011-11-20 Bruce Tate

在清单 8 中,这个 JavaScript 函数首先读取此 cookies 并获取 DOM 树的一部分:即到当 前的用户配置文件的链接,称为 profile_link。然后是 handle_user_partial 函数:

将登录用户的名称(存储在 login_cookie 内)替换成 my_login 以为用户配置文件页创建正确的 URL。

将登录用户名插入到 DOM 元素中,此元素使用粗体文本表示登录用户。

将简单的句子 “Not login?” 插入到 DOM 元素中,这个元素包含 login partial 中的 logout 标 题。

找到包含会员图像的 dom 元素,将一般图像的 URL 替换成会员图像的 URL,会员图像保存在 image_cookie 中。

此外,还要将此图像的 alt 标记替换成 login 名称,以防图像不出现。

在 DOM 中导航时,会发现有时需要直接转到 DOM 元素,而有时又需要转到该元素的特定子元素,比 如在处理文本的时候。我就使用了 firstChild 函数根据需要寻找 DOM 元素的第一个子元素。由于语法 更为友好,所以 Prototype 库使处理特定的 DOM 元素较为容易一些,但这超出了本文的讨论范围。

我已经创建好了所有的 cookies,最后一步就是从 handle_cached_user 函数调用 JavaScript。请记 住,该函数在 public/javascripts/application.js中:

清单 9. 将 handle_user_partial 函数添加到 handle_cached_user

function 

handle_cached_user() {
	var login_cookie = readCookie(''login'');
    var logged_in = document.getElementById(''logged_in'');
    var logged_out = document.getElementById(''logged_out'');
    if(login_cookie == null) {
      logged_in.style.display = ''none'';
      logged_out.style.display = ''block'';
    } else {
	  handle_user_partial();
      logged_out.style.display = ''none'';
      logged_in.style.display = ''block'';
    }
}

请注意,else 条件中的 handle_cached_user 函数下面还有额外两行代码。这两行代码可以在使 logged_in DOM 元素可见之前进行适当的替代。剩下所需做的就是使用本篇文章和 上个月 的那篇文章中 所介绍的页面缓存指令来缓存整个页。

结束语

本篇文章中介绍的这种高级技巧为我们打开了许多方便之门。在 ChangingThePresent.org 上,我们 估计使用非常简单的基于时间的清除器能够缓存超过 75% 的页面。通过使用稍微有些复杂的清除技巧, 我们就能缓存超过 90% 的页面,而且还可能更多。如果您想试图影响我们的图像缓存计划,那么您只能 触及应用服务器 1% 到 3% 的 Web 请求。

但同时,我们也应该看到不利的一面。我向此系统添加了明显的复杂性。我必须维护更加复杂的 HTML 代码,并确保 HTML 和 JavaScript 能够保持同步。但好的一面是在需要获得更好的性能时,我就能够使 用最为简单和有效的缓存技术。您也可以尝试使用这种技巧 — 访问 ChangingThePresent.org 并加载主 页。接下来,加载每个顶端的菜单。您会发现我们会页面缓存六个顶端菜单中的四个。创建一个帐号并重 载每一个菜单。您能猜到哪个页面被缓存了么?在下一篇文章中,在继续深入真实世界中的 Rails 的同 时,我将带您探究能增进 ActiveRecord 性能的一些技巧。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号