真实世界中的Rails,第2部分: 高级页面缓存 - 编程入门网
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |