fastruby / fastruby/fast-ruby

Methods defined with `define_method` are slower to call

Offen
#22 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Suggestion
Vorherrschende Sprache
Ruby
Sterne
5.7k
Forks
371
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

While `define_method` indeed defines methods slighly faster than `module_eval`, I think it should be noted that _calling_ methods defined with `define_method` is slower than calling `module_eval` ones (because `define_method` creates a closure):

``` rb
require "benchmark/ips"

object = Class.new {
module_eval "def evaled_method; end"
define_method(:defined_method) {}
}.new

Benchmark.ips do |x|
x.report("module_eval") { object.evaled_method }
x.report("define_method") { object.defined_method }
x.compare!
end
```

```
Calculating -------------------------------------
module_eval 98.664k i/100ms
define_method 93.809k i/100ms
-------------------------------------------------
module_eval 6.794M (± 8.1%) i/s - 33.743M
define_method 4.588M (± 6.7%) i/s - 22.889M

Comparison:
module_eval: 6793763.3 i/s
define_method: 4587570.1 i/s - 1.48x slower
```

I think you benefit more from a method being faster to call than faster to define.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.