2010-05-13 47 views
0

我有一个非常大的数据集(100,000)要显示,但任何浏览器,我试图包括铬5 dev,它使他们窒息几十秒(WIN7 64位,4GB,256GB的SSD,C2C2多2.4G赫兹)。我做了一个小实验由可以轨道块发送数据到浏览器块?

some_controller.rb

高清显示 @data =(1..100000).to_a 结束

show.html.erb

就像它扼杀浏览器一样简单。我知道浏览器从来没有为此构建,所以我想让数据以块的形式出现,我认为每个块有2000个是合理的,但是我不想每次调用这个视图时发出50个请求,有什么想法?如果它可以一次全部发送,它不一定是大块的。

最佳,

+0

我无法想象这样一个场景,显示将是一个用户有用的一个页面上的数据的100,000行。为什么不给用户方法来过滤与他们相关的数据? – 2010-05-13 22:03:59

+0

我知道,但这是一个语言学项目,需要一次性处理所有这些数据,细节很复杂,并且在这里没有范围,但是我很感谢您提供的服务,以提供更好的性能。 – 2010-05-14 00:23:35

+0

要做的另一件事是尽量减少你拥有的标记数量。拥有较小的DOM将减少浏览器的负载。 – 2010-05-14 01:44:42

回答

1

我没有看到,允许这样的事情一个插件,但我不记得这是什么所谓....将保持拖网我的笔记。

在此期间,这就是分页是:P

如果您使用案例不支持,可能使用AJAX将精简的东西......可以使用AJAX来逐步加载出来的数据,无论是用户滚动还是自动。

UPDATE:发现模板流插件:http://github.com/oggy/template_streaming

+0

感谢您的建议。是的,我也观看了瑞恩贝茨的“无尽的网页”剧集。 - 如果ajax请求变得太多,我将不得不测试我的服务器能处理多少... – 2010-05-14 00:21:58

+0

有了这么多记录,你的服务器可能已经花费了大量时间渲染。一些审慎的AJAX实际上可以减少负载,因为您可以在更短的时间内完成更小的请求(并且可以自己缓存)。在太多的小请求和太少的大请求之间会有一个甜蜜点,最好的建议是测量和看到。 – 2010-05-14 00:56:41

+0

不能同意更多,现在使用谷歌阅读器几年后,我对此感到满意。我猜测有100,000条记录,大概1000〜2000条每条请求都不会那么糟糕,也就是说,每条请求100〜50条请求。 只是出于好奇,服务器端没有任何压缩机制可以用来压缩这些html输出,然后让浏览器解压缩它,对吗? – 2010-05-14 19:31:05

1

一种方式来做到这一点是使用呈现,传递一个PROC。下面的代码片段来自Rails文档。

# Streams about 180 MB of generated data to the browser. 
render :text => proc { |response, output| 
    10_000_000.times do |i| 
    output.write("This is line #{i}\n") 
    output.flush 
    end 
} 

http://api.rubyonrails.org/classes/ActionController/Base.html#M000658

+0

感谢您的回答。出于某种原因,这实际上导致firefox崩溃(向mozilla事件发送报告),而我的原始方法使它变成“白色屏蔽”,但它最终返回。 – 2010-05-14 00:24:53