Jan 26th, 2010
by Fan Fan.
场景是这样的:我写的手机客户端要从豆瓣上取出当天最受欢迎的书评和影评,这些数据我是到douban.com相关页面上抓取的,大概有20条数据;然后我在这20条数据中随机取出6条显示到手机客户端
Rails内置几种cache机制:1.Page Cache – Fastest, 2.Action Cache – Next Fastest, 3.Fragment Cache – Least Fastest, 4.ActiveRecord Cache – Only available in Edge Rails 。从前端到后端,这几种cache机制粒度都不同,但是都不能满足我的需求。page cache会使每次返回同样的页面,这样达不到“随机”的效果。我希望是这样的:
def get_pop_list
fetch_reviews.random
render…
end
def fetch_reviews
{1…20}
end
我只希望get_reviews这个方法返回的结果是cache的,Action cache好像符合,实验一番后无果,这里的action是指rails中的controller而不是一般的method。
google了下找到了这里,刚好满足我的需求:对method的cache。参考这里例 子:
require ‘caches.rb’
class Spider extend Caches
def self.fetch_reviews
puts “—fetch_reviews”
[...]
Apr 4th, 2007
by Fan Fan.
这个帖子很不错,可以参照来学习Ruby。总结来说Ruby的优点在于:* closures* multiple implementation inheritance via mixins (simplifies a lot designs where we would use decorators and factories in java)* messages to objects as if they were first class methods (natural way of doing AOP, used a lot in ActiveRecord). This actually also counts for the famous java properties support planned [...]
Oct 20th, 2006
by Fan Fan.
RJS是Rails1.1的一个ajax的功能点。这里是一个简单明了的turturail。 这个framework引入了一个rjs类型的文件,当control的function执行后,同名的rjs文件会被执行来动态产生出(或者说是被翻译为)javascript文件。 rjs可以为如下的形式:a = “fkp”page.insert_html :bottom, ‘list’, content_tag(”li”, “Fox2″)page.visual_effect :highlight, ‘list’, :duration => 3page.replace_html ‘header’, a + “b”利用工具(for example:charles)可以得到其产生的response为:try {new Insertion.Bottom(”list”, “<li>Fox2</li>”);new Effect.Highlight(”list”,{duration:3});Element.update(”header2″, “fkpb”);} catch (e) …… 让人惊奇!我原来以为返回的是xml形式的(ajax必须返回xml吗?)。 这样的做法产生一个问题就是js的代码量可能过大,当然这里是因为直接调用而显得很简短(application.js就可以放自定义的js function的地方)。这些js基本上是没有变化的,那么能不能直接传参数呢?这样产生出来的js可以cache(google web tools好像是这样做的)。而rjs的做法感觉是对于page.methodxx的返回值每次来个字符串的相加? rjs不仅提供了ruby语法的api来简化js的开发,更重要的是将ajax从view曾剥离出来,而且可以访问server端同名function的导出变量(@开头的?这湮没了xml在B/S间的传递)。 跟其它的ajax框架不一样(大多可以用js直接访问后台的java function),这种方式去掉了访问的接口的定义(method的返回值没有定义),灵活性更强,因为view可能改变频繁。 用这种模式后,契约存在两个地方:1)rjs和html。rjs用id来对html element控制,一般的ajax模式是把js和html混合写,由于id粒度过低,分开加大了耦合度;2)ruby和rjs之间的context。显然,google web tools解决了这些问题,但是需要讨厌的compile的过程。 如果用java来实现,rjs模板可以用java写,也可以为脚本语言(jdk6有更好的支持),而主要不同可能是java代码和模板之间的contex的共享:java可能没有ruby实现的优雅。 模板产生出来的javascriptbroswer端用如下的形式引用:<script src=”/javascripts/prototype.js?1159875410″ type=”text/javascript”></script><script src=”/javascripts/effects.js?1159875410″ type=”text/javascript”></script>还不知这些number是做何用处。