- 01 10月, 2014 1 次提交
-
-
由 Adrian Rangel 提交于
-
- 29 9月, 2014 3 次提交
-
-
由 Erik Michaels-Ober 提交于
Hash#keys.each allocates an array of keys; Hash#each_key iterates through the keys without allocating a new array. This is the reason why Hash#each_key exists.
-
由 Ben Woosley 提交于
@column_names_with_alias, @dynamic_methods_hash, @time_zone_column_names, and @cached_time_zone
-
由 Pete Higgins 提交于
Inspired by @tenderlove's work in c363fff2, this reduces the number of strings allocated when running callbacks for ActiveRecord instances. I measured that using this script: ``` require 'objspace' require 'active_record' require 'allocation_tracer' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Base.connection.instance_eval do create_table(:articles) { |t| t.string :name } end class Article < ActiveRecord::Base; end a = Article.create name: "foo" a = Article.find a.id N = 10 result = ObjectSpace::AllocationTracer.trace do N.times { Article.find a.id } end result.sort.each do |k,v| p k => v end puts "total: #{result.values.map(&:first).inject(:+)}" ``` When I run this against master and this branch I get this output: ``` pete@balloon:~/projects/rails/activerecord$ git checkout master M Gemfile Switched to branch 'master' pete@balloon:~/projects/rails/activerecord$ bundle exec ruby benchmark_allocation_with_callback_send.rb > allocations_before pete@balloon:~/projects/rails/activerecord$ git checkout remove-dynamic-send-on-built-in-callbacks M Gemfile Switched to branch 'remove-dynamic-send-on-built-in-callbacks' pete@balloon:~/projects/rails/activerecord$ bundle exec ruby benchmark_allocation_with_callback_send.rb > allocations_after pete@balloon:~/projects/rails/activerecord$ diff allocations_before allocations_after 39d38 < {["/home/pete/projects/rails/activesupport/lib/active_support/callbacks.rb", 81]=>[40, 0, 0, 0, 0, 0]} 42c41 < total: 630 --- > total: 590 ``` In addition to this, there are two micro-optimizations present: * Using `block.call if block` vs `yield if block_given?` when the block was being captured already. ``` pete@balloon:~/projects$ cat benchmark_block_call_vs_yield.rb require 'benchmark/ips' def block_capture_with_yield &block yield if block_given? end def block_capture_with_call &block block.call if block end def no_block_capture yield if block_given? end Benchmark.ips do |b| b.report("block_capture_with_yield") { block_capture_with_yield } b.report("block_capture_with_call") { block_capture_with_call } b.report("no_block_capture") { no_block_capture } end pete@balloon:~/projects$ ruby benchmark_block_call_vs_yield.rb Calculating ------------------------------------- block_capture_with_yield 124979 i/100ms block_capture_with_call 138340 i/100ms no_block_capture 136827 i/100ms ------------------------------------------------- block_capture_with_yield 5703108.9 (±2.4%) i/s - 28495212 in 4.999368s block_capture_with_call 6840730.5 (±3.6%) i/s - 34169980 in 5.002649s no_block_capture 5821141.4 (±2.8%) i/s - 29144151 in 5.010580s ``` * Defining and calling methods instead of using send. ``` pete@balloon:~/projects$ cat benchmark_method_call_vs_send.rb require 'benchmark/ips' class Foo def tacos nil end end my_foo = Foo.new Benchmark.ips do |b| b.report('send') { my_foo.send('tacos') } b.report('call') { my_foo.tacos } end pete@balloon:~/projects$ ruby benchmark_method_call_vs_send.rb Calculating ------------------------------------- send 97736 i/100ms call 151142 i/100ms ------------------------------------------------- send 2683730.3 (±2.8%) i/s - 13487568 in 5.029763s call 8005963.9 (±2.7%) i/s - 40052630 in 5.006604s ``` The result of this is making typical ActiveRecord operations slightly faster: https://gist.github.com/phiggins/e46e51dcc7edb45b5f98
-
- 28 9月, 2014 1 次提交
-
-
由 Robin Dupret 提交于
Since we want this flag to be enabled anytime we are running the tests under JRuby, let's enable this at the Rakefile level so people get the performance boost on their local checkout. Moreover, we avoid having to update this particular line anytime the option changes on the JRuby side. The only drawback is that we have to define it in every Rakefile but there's no big deal, this is already the case for other options.
-
- 27 9月, 2014 3 次提交
-
-
由 Prathamesh Sonpatki 提交于
- middlware -> middleware
-
由 Aaron Patterson 提交于
Benchmark: ```ruby require 'objspace' require 'active_record' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Base.connection.instance_eval do create_table(:articles) { |t| t.string :name } end class Article < ActiveRecord::Base; end a = Article.create name: "foo" a = Article.find a.id N = 10 ObjectSpace::AllocationTracer.trace do N.times { Article.find a.id } end ObjectSpace::AllocationTracer.allocated_count_table table.sort_by { |_,x| x }.each do |k,v| p k => (v / N) end ```
-
由 Rafael Mendonça França 提交于
-
- 23 9月, 2014 6 次提交
-
-
由 Simon Eskildsen 提交于
Honoring an overidden `rack.test` allows testing closed connection between multiple requests. This is useful if you're working on database resiliency, to ensure the connection is in the expected state from one request to another on the same worker.
-
由 Prathamesh Sonpatki 提交于
[ci skip]
-
由 Aaron Patterson 提交于
it doesn't work on SQLite3 since it doesn't support truncate, but that's OK. If you call truncate on the connection, you're now bound to that database (same as if you use hstore or any other db specific feature).
-
由 Peter Marsh 提交于
Previously the documentation stated that `primary_key` should be the name of a *method* that returns the primary key used for the association. This is incorrect. This changes the documentation to say that the value must be the name of a column.
-
由 Arthur Neves 提交于
-
由 Will Bryant 提交于
fix fixtures not loading if a belongs_to association is defined with a :foreign_key option that's a symbol
-
- 22 9月, 2014 1 次提交
-
-
由 Yuki Nishijima 提交于
This test has always been green because it uses "assert" and the first argument is an truthy class/object.
-
- 21 9月, 2014 1 次提交
-
-
由 Yuki Nishijima 提交于
-
- 20 9月, 2014 4 次提交
-
-
由 Jon Atack 提交于
-
由 Godfrey Chan 提交于
The hash is now string-keyed, and [_]reflect_on_association calls `to_s` on the argument anyway.
-
由 Godfrey Chan 提交于
For now, we will just skip the cache when a non-column key is used in the hash. If the future, we can probably move some of the logic in PredicateBuilder.expand up the chain to make caching possible for association queries. Closes #16903 Fixes #16884
-
由 Godfrey Chan 提交于
This is pretty lame though, so feel free to send a PR with a better fix! ;) cc @zev @tenderlove
-
- 19 9月, 2014 2 次提交
-
-
由 lethalbrains 提交于
-
由 Prathamesh Sonpatki 提交于
- Added a note about some features which are not dependent on auto-generated ID's. - [ci skip]
-
- 18 9月, 2014 3 次提交
-
-
由 Geoff Harcourt 提交于
While investigating #16951 I found that another library's monkey-patching of `Enumerable` was causing the test migrations helper to break when trying to build the `CREATE DATABASE` statement. The prior approach used `#sum` to build the string from the options hash. As the code that combines the options to build the database statement is not user-facing, using `#inject` here instead will remove the only place where the database creation/migration code is dependent on ActiveSupport's monkey-patching of `Enumerable`.
-
由 Rafael Mendonça França 提交于
-
由 Sean Griffin 提交于
-
- 17 9月, 2014 4 次提交
-
-
由 Yves Senn 提交于
-
由 Yves Senn 提交于
-
由 Yves Senn 提交于
Closes #16907. [Matthew Draper & Yves Senn]
-
由 stopdropandrew 提交于
Maintain compatibility for: * ActiveRecord::Base#find(:all) * ActiveRecord::Base#find(:first) * ActiveRecord::Base#find(:last)
-
- 15 9月, 2014 1 次提交
-
-
由 Alan Kennedy 提交于
-
- 11 9月, 2014 10 次提交
-
-
由 Yves Senn 提交于
-
由 Yves Senn 提交于
-
由 Yves Senn 提交于
Working with two different machines is hard
😓 -
由 Yves Senn 提交于
[Matthew Draper & Yves Senn] Closes #16860. (pull request to discuss the implementation)
-
由 Jim Jones 提交于
Changed the DangerousAttributeError exception message to include messaging that the conflict could be because of a conflicting attribute.
-
由 Jeremy Kemper 提交于
Dump the standard schema once instead of redoing it per test
-
由 Jeremy Kemper 提交于
Allows :limit defaults to be changed without pulling the rug out from under old migrations that omitted :limit because it matched the default at the time.
-
由 Jeremy Kemper 提交于
-
由 Jeremy Kemper 提交于
-
由 Yasuo Honda 提交于
to drop sequences at the same time each tables dropped for Oracle
-