我在Rails应用程序中有一个花哨的"工作表"样式视图,这个视图占用时间太长.(在开发模式下,是的,我知道那里没有缓存,"在57893ms完成(查看:54975,数据库:855)")工作表是使用辅助方法呈现的,因为我无法忍受保持无数的小部分工作表中的各种行.现在我想知道部分实际上是否会更快?
我已经分析了页面加载并确定了一些对象缓存会刮掉几秒钟的情况,但是配置文件输出表明花费了大量时间来简单地循环遍历Worksheet模型的组成对象并附加来自帮手.这是我正在谈论的一个例子:
def header_row(wksht)
content_tag(:thead, :class => "ioe") do
content_tag(:tr) do
html_row = []
for i in (0...wksht.class::NUM_COLS) do
html_row << content_tag(:th, h(wksht.column_headings[i].upcase),
:class => wksht.column_classes[i])
end
html_row.join("\n")
end
end
end
Run Code Online (Sandbox Code Playgroud)
OTOH使用partials意味着打开文件,分离Ruby解释器,从长远来看,聚合一堆字符串,对吗?所以我想知道是否有另一种方法可以加快助手的速度.我应该使用像stringstream这样的东西(在Ruby中存在吗?),我应该摆脱content_tag调用,转而支持我自己的""字符串插值...我愿意编写自己的性能测试,并分享结果,如果你有任何建议的方法我已采取的方法.
由于它是一个相当复杂的视图(并且还有一个可编辑的版本),我宁愿不要多次重写和描述整个事物.:)
一些相关阅读:
http://www.viget.com/extend/helpers-vs-partials-a-performance-question/(旧)
http://www.breakingpointsystems.com/community/blog/ruby-string-processing-overhead/
http ://blog.purepistos.net/index.php/2008/07/14/benchmarking-ruby-string-interpolation-concatenation-and-appending/
@tadman: 有行总数和列总数(以及更多的柱状算术),并且因为它们不仅仅是总数,而且还依赖于数据库中的其他"幻数",我在Ruby代码而不是Javascript中实现它们.(DRY和单元可测试.)Javascript仅在编辑视图中使用,仅用于添加/删除行(仅限客户端),并在单元格内容更改时获取具有新总计的工作表.它获取整个表,因为当输入单元格发生更改时,将近一半的值会更新.
工作表及其行实际上是虚拟模型; 它们并不存在于数据库中,而是汇集了大量真正的AR对象.每次视图呈现时都会创建它们(但在开发模式下需要1.7秒,所以我并不担心它).
我想我可以传输一个数字矩阵,而不是标记内容,并让JS将其解压缩到表格中.但这很快就无法维持.