rails/rails — pull request #10524 by wangjohn (2013-05-08 18:58:23+00:00)
Title: Using define method instead of class eval when defining model callbacks.

Based on my benchmark results, this change improves performance
substantially when defining callbacks (especially for apps that are defining large numbers of callbacks).

This benchmark (https://gist.github.com/wangjohn/5542610) was run using
the current master and also using my experimental branch which replaced
class_eval with define_single_method.

Using class_eval (current master):

user system total real
10 trials 0.000000 0.000000 0.000000 ( 0.001568)
50 trials 0.020000 0.000000 0.020000 ( 0.021715)
500 trials 0.110000 0.000000 0.110000 ( 0.115357)
1000 trials 0.250000 0.000000 0.250000 ( 0.260025)
10000 trials 2.560000 0.000000 2.560000 ( 2.568408)
50000 trials 12.800000 0.010000 12.810000 ( 12.886871)

Using define_single_method (experimental branch):

user system total real
10 trials 0.000000 0.000000 0.000000 ( 0.000790)
50 trials 0.000000 0.000000 0.000000 ( 0.002960)
500 trials 0.050000 0.010000 0.060000 ( 0.055690)
1000 trials 0.100000 0.000000 0.100000 ( 0.094073)
10000 trials 0.890000 0.000000 0.890000 ( 0.900364)
50000 trials 4.650000 0.000000 4.650000 ( 4.686127)