2012-04-05 75 views
0

我有一个大的方法返回一个大的HTML字符串。这是非常无效的,并且浏览器需要很长时间才能一次加载全部HTML。我的问题是:Ruby on Rails是否有办法将HTML的一部分打印到缓冲区,因此它不会一次完成所有操作?Ruby on Rails - 打印输出到缓冲区

这里是我的意思是:

module TestHelper 
    def my_method 
     output = "" 
     output += "<div>" 
     output += "<span>Test</span>" 
     output += "</div>" 
     return output 
    end 
end 

但我想知道如果我能做到这一点是这样的:

module TestHelper 
    def my_method 
     print_to_page "<div>" 
     print_to_page "<span>Test</span>" 
     print_to_page "</div>" 
    end 
end 

我的问题是关于如何做到这一点不同的不方式或“正确”的方式,这就是为什么我这样做的原因。我在网上搜索并阅读了关于with_output_buffer,但我不知道这是如何工作。有什么建议么?

+3

没有什么好的理由可以想到为什么递增输出一个字符串会比一次完成更好。也就是说,你应该使用'<<'而不是'+ ='来构建字符串。 ['+ ='每次调用时会创建一个新对象,而'<<'不会](http://stackoverflow.com/a/9707026/211563)。这种改变*会*提高你的表现(也许戏剧性地取决于你的实际代码)。 – 2012-04-05 18:07:45

+0

这似乎是一个很大的区别,因为我有一个PHP版本,它输出一个字符串(该函数会自动多次调用)以及一个Ruby版本,它在最后返回一个字符串。我也做了一点不同...我添加字符串到数组,然后加入数组。但我不认为这是问题,因为慢部分在客户端/浏览器端。 – 2012-04-05 18:13:59

+0

我看到,您关心的是“部分页面”(缺少更好的术语)加载时间,其中至少有一些页面已显示,而不是最终页面加载时间。您可能需要考虑首先尝试优化慢速方法,如果用户在相同的时间段内没有看到所有内容,IMO会快速查看一些内容对用户来说并不是好得多 - 但这又是我的看法和我不知道你的更广泛的用例。 – 2012-04-05 18:18:59

回答

0

更高版本的rails支持streaming,它可以有效地为您提供您所要求的。

但是!要小心你所要求的是你所需要的。使用firebug的净选项卡查看页面加载时间以及时间花费的时间。如果浏览器花了很长时间等待获取任何页面数据,那么流式传输可能会对您有所帮助。但是,请记住,要使用流式处理,您的代码也必须能够以块形式生成HTML页面。这可能比你想象的更难 - 像

<%= table_tag { render_huge_table } %> 

不能使用。