hof*_*ffm 2 activerecord ruby-on-rails
我编写了一个定期运行的任务,用于重新计算和更新Active Record模型的特定列中的信息.通常,新计算的对象(如果重要的话,它是json编码的哈希)将与现有对象相同.在这种情况下,我怀疑检查此身份并中止保存而不是保存可能更有效.因此,我正在考虑使用self.save! if changed?
而不仅仅是self.save!
.我的问题是:
if changed?
条件来节省CPU时间?(如果我在这里误用了一些术语,我很抱歉.我是游戏的新手.)
没有进行db查询,这是一个在控制台中使用Rails 3.1.1的简单示例:
> s = Shop.first
=> #<Shop id: 1, name: "Ben", address: "paris", latitude:
> 48.856614, longitude: 2.3522219, gmaps: true, created_at: "2011-10-13 13:17:24", updated_at: "2011-10-13 13:17:24"> ruby-1.9.2-p290 :003 >
> s.name = "Ben" => "Ben"
> s.save
=> true
> s.updated_at
=> Thu, 13 Oct 2011 13:17:24 UTC +00:00
> s.update_attribute(:name, "Ben")
=> true
> s.updated_at
=> Thu, 13 Oct 2011 13:17:24 UTC +00:00
> s.update_attributes({:name => "Ben"})
=> true
> s.updated_at
=> Thu, 13 Oct 2011 13:17:24 UTC +00:00
> s.name = "Ben"
=> "Ben"
> s.save!
> s.updated_at
=> Thu, 13 Oct 2011 13:17:24 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
编辑:
rails profiler 's = Shop.first; s.name = "Ben"; s.save;' 's = Shop.first; s.name =
Loaded suite script/rails
Started
ProfilerTest#test_s_shop_first_s_name_ben_s_save (78 ms warmup)
process_time: 5 ms
ProfilerTest#test_s_shop_first_s_name_ben_s_save_if_s_changed (1 ms warmup)
process_time: 2 ms
Finished in 2.597531 seconds.
Run Code Online (Sandbox Code Playgroud)
所以它更快if changed?
.
归档时间: |
|
查看次数: |
2447 次 |
最近记录: |