Tag: 性能

使用Rails作为大型网站的框架

我已经玩Rails(版本3)几个月了,我对框架相当了解。 但是,我还没有开发一个提供大量数据库访问和用户交互的大型网站。 我对以下内容持怀疑态度: Ruby的速度和可伸缩性(我听说它比大多数其他服务器端语言慢10倍)。 Rails作为框架(多级abstration)的额外后台处理。 缺乏在Rails上运行的企业级Web应用程序(我能想到的只有Groupon,Github和Hulu)。 环境的复杂性(nginx> mongrel> rails> ruby​​>网站)。 幕后的SQL操作(我知道这些可以优化,但我确信我会错过一些)。 由于这些原因,我不确定是继续使用Rails还是转换为构建在更高性能语言上的东西。比如Java Spring。 请指教 :)

Ruby符号不是垃圾收集的!? 那么,使用String不是更好吗?

如果在循环中创建10,000个字符串,则必须进行大量垃圾收集,这会占用大量资源。 如果对符号执行相同的操作,则会创建无法进行垃圾回收的对象。 哪个更糟?

‘after_filter’如何/何时运行/运行?

我正在使用Ruby on Rails 3.1,我想知道(出于性能原因) after_filter是否在渲染视图文件之后运行。 也就是说,当用户访问我的应用程序URL时,他/她应该显示的相关视图文件在after_filter运行之前呈现,或者after_filter在呈现视图文件之前运行? 换句话说 , 应用程序服务器在运行after_filter之前开始将呈现的视图数据发送给用户,或者它等待运行after_filter方法,然后才发送该视图数据? PS :我打开了这个问题,因为我想运行一些系统更新( 注意 :这些更新不会影响视图输出数据,并且不会“视图”/“必要”用于视图)而不会影响结束用户体验(例如:缓慢加载我的应用程序网页)。

Ruby中字符串字典中的快速模糊/近似搜索

我有一个50K到100K字符串的字典(最多可以有50多个字符),我试图找到给定字符串是否在字典中具有一些“编辑”距离容差。 (例如Levenshtein)。 在进行搜索之前,我很好地预先计​​算任何类型的数据结构。 我的目标是尽可能快地对该字典运行数千个字符串并返回最近的邻居。 我会很好的只是得到一个布尔值,说明一个给定是否在字典中,如果有一个明显更快的算法这样做 为此,我首先尝试计算所有Levenshtein距离并采取最小值,但显然非常慢。 所以我尝试在这篇文章的基础上实现Levenshtein Trie http://stevehanov.ca/blog/index.php?id=114 请参阅我的要点,重现基准: https : //gist.github.com/nicolasmeunier/7493947 以下是我在机器上的一些基准测试: 编辑距离0(完美匹配) Benchmark.measure { 10.times { dictionary.search(random_word, 0) } } * 编辑距离2,变得慢很多* Benchmark.measure { 10.times { dictionary.search(random_word, 2) } } 它从那里走下坡路,并且编辑距离大于2时变得非常慢。(每个测试字符串的平均值超过1秒)。 我想知道如何/如果我可以显着加快这一点。 如果已经在ruby / gem中实现了现有解决方案,我也不想重新发明轮子…… 编辑1:在我的情况下,我希望我与字典匹配的大多数字符串不在那里。 因此,如果有任何算法可以快速丢弃字符串,那可能会有所帮助。 谢谢,尼古拉斯

将partial转换为method / block以获得速度

我有一个循环,呈现部分 1000.times do |i| render partial: ‘test’, locals: {i: i} end 对于foreach渲染调用,这非常慢,最长可达0.1 ms,即使部分仅打印出i my_partial = render_to_method(partial: ‘test’) 1000.times do |i| my_partial(locals: {i: i}) end 现在这应该以更快的方式做同样的事情吧? 但我不知道该怎么做。 更新: 我试过这样做: Haml::Engine.new(File.read(File.expand_path File.dirname(FILE)+”/../table/#{column.macro}/_#{column.display_type}.haml”)) .‌​render(OpenStruct.new({column_value: column_value, object: object})) 两个主要缺点: 视图的路径不会像使用渲染时那样观察回退(parital:’partial’将在当前视图dir,某些gem以及视图/应用程序中查找parital。 Rails视图助手不再可用 更新2: 许多答案试图通过使用其他技术来解决问题。 我的真实应用这种技术无法应用。 https://github.com/antpaw/bhf/blob/master/app/views/bhf/pages/_platform.haml#L54主要是因为这一行是一个动态字符串,有时会链接到甚至不存在的部分在gem中并在main_app中定义。 我想知道为什么做一些如此基本的事情是如此困难:1。抓住观点。 2.渲染它。 (3.再次渲染。) 更新3: @Flash Gordon建议这个https://gist.github.com/antpaw/d6670c23d6f08e35812e#file-gistfile1-haml-L54 template = lookup_context.find_template “#{column.macro}/#{column.display_type}”, [‘bhf/table’], true template.render(self, {column_value: […]

Rails:更快地对许多记录执行更新

在我们的Rails 3.2.13应用程序(Heroku中的Ruby 2.0.0 + Postgres)中,我们经常从API中检索大量订单数据,然后我们需要更新或创建数据库中的每个订单,以及关联。 单个订单创建/更新自身加上约。 10-15个关联对象,我们一次最多导入500个订单。 下面的代码有效,但问题是它在速度方面根本没有效率。 创建/更新500条记录大约需要 1分钟,生成6500多个db查询! def add_details(shop, shopify_orders) shopify_orders.each do |shopify_order| order = Order.where(:order_id => shopify_order.id.to_s, :shop_id => shop.id).first_or_create order.update_details(order,shopify_order,shop) #This calls update_attributes for the Order ShippingLine.add_details(order, shopify_order.shipping_lines) LineItem.add_details(order, shopify_order.line_items) Taxline.add_details(order, shopify_order.tax_lines) Fulfillment.add_details(order, shopify_order.fulfillments) Note.add_details(order, shopify_order.note_attributes) Discount.add_details(order, shopify_order.discount_codes) billing_address = shopify_order.billing_address rescue nil if !billing_address.blank? BillingAddress.add_details(order, billing_address) end shipping_address = […]

Ruby GC执行超过每个请求约250-320ms

我在rails应用程序上有一个ruby。 我正在调查我的NewRelic门户网站的Apdex下降,我看到平均而言,GC执行花费了250-320ms。 这是一个非常令人不安的数字。 我在下面放了一个屏幕截图。 我的Ruby版本是: ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-linux] 任何调整这个的建议都是理想的。 这个数字应该大大降低。

将哈希数组转换为散列哈希值,由哈希值的属性索引

我有一个表示对象的哈希数组作为对API调用的响应。 我需要从一些哈希中提取数据,并且一个特定的键用作哈希对象的id。 我想将数组转换为哈希,键为ids,值为原始哈希值。 这就是我在说的: api_response = [ { :id => 1, :foo => ‘bar’ }, { :id => 2, :foo => ‘another bar’ }, # .. ] ideal_response = { 1 => { :id => 1, :foo => ‘bar’ }, 2 => { :id => 2, :foo => ‘another bar’ }, # .. } 我有两种方法可以想到这样做。 […]

如何调试慢速rails应用程序启动时间?

我们的rails应用程序一旦加载就很好而且速度很快但启动速度非常慢。 控制台,乘客等都需要大约10秒的时间才能启动。似乎比应有的方式更多。 我应该使用哪些工具或方法来磨练最慢的部件? 通常的嫌疑人是什么?

ruby脚本中“rake routes”的结果

rake routes很慢(我的电脑30秒)但我需要它来路由规格。 那么,有没有办法让所有路线像耙路线? (或rake路线如何工作?) 我使用Rails 3,我所看到的只是Rails 3,我发现我无法在rails doc中使用。