Methods defined with `define_method` are slower to call
- Linguagem predominante
- Ruby
- Estrelas
- 5.7k
- Forks
- 370
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
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.
Guia de contribuição
Direção de pesquisa
Comece localizando a comparação existente entre `define_method` e `module_eval` no repositório e, em seguida, revise o benchmark mostrado na issue. O trabalho estará concluído quando for documentado que chamar métodos criados com `define_method` é mais lento, juntamente com a comparação existente de definição de métodos e sua compensação de desempenho.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- ruby
- Domínio
- documentation, performance
- Tipo de issue
- Documentação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 42/100