【问题标题】:Is Create method or Update faster?创建方法或更新更快吗?
【发布时间】:2015-07-30 05:59:43
【问题描述】:

我正在使用 rails 3.2.11 和 ruby​​ 1.9.3。 我的页面很慢,我知道我有很多方法可以优化它。目前我专注于方法 update_attributes。

这是我的代码:

def create
  @user = current_user
  @demo = @user.demos.new

  race_ethnicity_response = []
  params[:race_ethnicity_response].each do |response, value|
    race_ethnicity_response << response if value != '0'
  end

  params[:demo][:race_ethnicity_response] = race_ethnicity_response.join(', ')[0, 254]
  @demo.update_attributes(params[:demo])
end

或者我应该使用构建和保存或创建之类的东西吗?

@demo = @user.demos.build
...
@demo.save!

或者

@users.demos.create!(params[demo])

我很好奇哪个更快。我知道如果它可以节省 2 毫秒,那么我应该使用代码更正确/可读的那个。

【问题讨论】:

  • 没关系。我敢打赌他们会发出相同的 SQL 命令
  • update_attributes 和 save 可能会产生相同的 sql,但如果 update_attributes 在进行 sql 调用之前进行大量检查会怎样。或其他事情。
  • 页面有多慢?您可以从控制台发布显示速度的日志吗?
  • 我正在使用迷你分析器,有时该部分可能需要 230 毫秒
  • update_attribute 和 save 是一样的:)。但更好的是只使用创建!方法?

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord


【解决方案1】:

在这样的小型操作中,您不会看到太大的性能差异。追求可读性+可维护性。上面的代码确实看起来有点分散,尤其是中间块。这是一个简单的方法,尽管我可能遗漏了一些与 params[:race_ethnicity_response] 循环相关的内容。

@demo = Demo.new(:params)
@demo.race_ethnicity_response = race_ethnicity_response.reject{|i| i == 0 }.join(', ')[0, 254]
current_user.demos << @demo

【讨论】:

  • 对于 race_ethnicity_response 我需要先删除所有的“0”
  • 已更新。无法对其进行测试,但您明白了。
  • “race_ethnicity_response”不是散列
猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2013-03-27
  • 2015-07-11
  • 2011-08-08
  • 1970-01-01
相关资源
最近更新 更多