fastruby / fastruby/fast-ruby

Methods defined with `define_method` are slower to call

Abierto
#22 1 comentario 0 reacciones 0 asignados Ver en GitHub
Suggestion
Lenguaje dominante
Ruby
Estrellas
5.7k
Forks
371
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.