page cache with dynamic content

Posted by phoenix on May 5th, 2008 filed in Rails应用

在rails的3种cache策略page cache, action cache和fragment cache中, page cache无疑是最快的.它把控制完全地交给web server, 会在RAILS_ROOT/public/目录下生成缓存过的静态文件,绕过了rails的处理,自然速度飞快.在现实应用中,页面的内容不可能是纯静态的,通常还包含特定用户的信息,这样是不是就是说不能使用page cache了呢?当然不是.这时javascript就可以帮上忙了.
有两种处理方式:
1.先加载页面的大部分,然后使用 JavaScript 和 Ajax 加载该页面较小的动态部分。
在页面上发起一个ajax请求

1
 new Ajax.Request("/home/get_info", {asynchronous:true, evalScripts:true, method:'get'});

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

1
2
3
4
5
6
7
8
9
10
11
12
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';
    }
}

上述两种方式的比较.前者取得少量dynamic content的ajax调用还是会牵涉到rails, 后者则完全和rails无关,速度更快,其缺点是页面上的javascript有时会过于复杂,难以管理,而且不能在cookie中存储敏感信息.前者更为灵活,虽然还是会牵涉到rails, 但是在dynamic content只占页面总数据量的比例很小时,仍能借此得到不小的性能提升.

No related posts.

Leave a Comment