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