2012-02-17 50 views
0

在Rails 2中,我试图优化缓慢加载网页的性能。Rails 2从一个模型调用到另一个模型很慢

我正在计算模型中语句的执行时间,发现从一个模型到另一个模型的调用中出现了令人惊讶的时间量,尽管看起来根本没有数据库访问。

具体而言,我们说是慢的模式是部门,我计算Department.expenditures。支出法需要知道季度是否已经关闭,且该信息是在一个不同的模型,季度

第一次Department.expenditures调用Quarter.closed?有一个数据库访问,我可以接受。但是我已经做了一些事情以便将它保存在模型方法的内存中,以便将来调用Quarter.closed?没有数据库访问权限。 Quarter.closed内的代码?现在运行大约4微秒,但只需调用Quarter.closed?从内部部门。支出需要400微秒,并与数百个部门,这加起来。

我可以缓存全局变量里面Quarter.closed值,但似乎有毛。有没有人知道发生了什么或有更好的做法的建议?

回答

0

不是100%确定这是否适用于您的问题。但是,在许多情况下,加载时间相似的情况下,预加载可以解决问题。你会做这样的:

Department.all(:include => :expenditures) 

我有点出轨道2语法。在Rails 3,您可以指定包括比较详细的是这样的:

Category.includes(:posts => [{:comments => :guest}, :tags]).find(1) 

我认为(但不知道)的:包括梁2选项允许类似的语法 所以,也许这会工作:

Department.all(:include => [:expenditures => [:quarters]]) 

(可能需要在这里结合使用排列/散列语法进行一些实验)

相关问题