2012-04-05 43 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 } %> 

不能使用。