快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
f request.post?   self.current_user = User.authenticate(params[''user_login''], params [''user_password''])   ...   if logged_in?    set_cookies    ...   end end def logout end private def set_cookies  cookies[:login] = current_user.login  cookies[:image] = find_thumb(current_user.member_image) end def logout  cookies.delete :login  cookies.delete :image  ... end

在清单 3 中,logged_in? 是一个私有方法,如果当前用户已登录则返回 true。上述的 Rails 方法会在您登录时创建三个 cookie,并在登出时删除它们。这里不需要为数据费神。尚且不需用 到数据。可以这样理解:无需调用 Rails 框架,我就可以判断用户是否登录。我无需确保 cookie 到期 终止是否与站点的到期终止规定相符。在我的例子中,二者是相符的,所以我现在尽可以开始页面缓存了 。

下一步,根据用户的 cookie 选择性地隐藏和显示正确的条目。将如下的 JavaScript 代码添 加到 public/javascripts/application.js 中:

清单 4. 支持 show and hide 登录 div 的 JavaScript 代码

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split('';'');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)=='' '') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
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 {
   logged_out.style.display = ''none'';
   logged_in.style.display = ''block'';
  }
}

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

时间:2011-11-20 Bruce Tate

第一个函数从 Javascript 中读取 cookie 值,第二个函数处理此 DOM。可以通过使用 Prototype 库 简化这段代码,但我包括了基本的 DOM 查找以便于读者理解。最后一步是在页面加载时调用 JavaScript 函数。我向布局中添加了如下代码:

清单 5. 当页面加载时调用 JavaScript 函数

  

<script type="text/javascript">
   window.onload = function() {
     handle_cached_user();
      <%= render_nifty_corners_javascript %>
      <%= yield :javascript_window_onload %>
   }
  </script>

上述 JavaScript 代码十分简单。在页面加载时,将加载 handle_cached_user 函数,而它会相应地显示或隐藏正确的内容。现在,我尽可以通过向控制器中添加 如下代码来启用页面缓存:

  caches_page :index

上述代码效果极佳。我还是需要 定期地从缓存中删除前页,这样我才能使该页期满终止。为此,我只需简单地定期删除 public/index.html。hide-and-seek 方式对于有几类用户的页面十分有效,但对于如图 2 中所示的用户 partial 效果却不佳。对于后者,需要综合使用 hide-and-seek 和 show-and-tell 技巧。

实现 show-and-tell

再来看看 图 2。我将使用 hide-and-seek — 根据用户是否已登录 — 选择 partial 的正确版本,然后使用 show-and-tell 技巧根据我之前在清单 3 的行 4 和行 5 中所写 的 cookies 的内容填充页面的动态部分。请记住,

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