赵劼jeffz@live.com赵劼,网名老赵,洋名JeffreyZhao博客:http://www.cnblogs.com/JeffreyZhao/推特:@jeffz_cnInfoQ中文站编辑某创业小公司架构师+程序员希望可以给给初学者以合适引导。坚定的北大青鸟反对者,强烈愤慨恶劣的培训机构对于处于懵懂期的初学者以误导,强烈抵制各种虚假广告给业界带来的不良影响,强烈建议有理想有抱负的从业青年放弃北大青鸟,不要做冤大头。性能降低资源浪费能耗增加温室效应冰川融化地球毁灭CPU磁盘浏览器DNS网页快照……客户端缓存表现层缓存业务逻辑层缓存数据访问层缓存数据库缓存……HTTP/1.1◦Expires,Max-Age,ETag...RequestHeader◦If-Modified-Since◦If-None-MatchResponseHeader◦Expires◦Cache-Control◦Last-Modified◦ETag利用HTTP/1.1的标准(同上)使用JavaScript编程时缓存数据:window.workWithCache=function(id){vardata=window._cache["id_"+id];if(data!=undefined)work(data);makeAjaxRequest(id,window.ajaxCallback);}window.ajaxCallback=function(id,data){window._cache["id_"+id]=data;work(data);}检查缓存No.1~30◦缓存为空发出请求◦请求图片No.1~30收到回复◦缓存图片No.1~30显示图片◦显示图片No.1~30请求前请求后检查缓存No.41~70◦缓存为空发出请求◦请求图片No.41~70收到回复◦缓存图片No.41~70显示图片◦显示图片No.41~70请求前请求后检查缓存No.21~50◦发现缓存No.21~30◦发现缓存No.41~50发出请求◦请求图片No.31~40收到回复◦缓存图片No.31~40显示图片◦显示图片No.21~50请求前请求后便利:◦单线程环境,避免许多麻烦◦对于生命周期短的页面,无须资源释放限制◦无法跨页面缓存◦刷新后缓存即清空◦对于生命周期长的页面,需要制定资源释放策略何时释放数据?释放哪些数据?静态页◦粒度过大◦几乎无法用于一般Web2.0系统整页动态缓存◦灵活性较静态页略高◦粒度仍然过大页面片断缓存(fragmentcaching)classBlogController
'list')@articles=Article.find_recentendendend<%cachedo%><%forarticlein@articles-%><%=h(article.body)%>
<%end-%>
<%end%>某些时候因为@articles没有初始化而出错详见RobinLu于RubyConfChina2009中的演讲“RubyonRailsPitfall...