fastruby / fastruby/fast-ruby

Methods defined with `define_method` are slower to call

Aberta
#22 1 comentário 0 reações 0 responsáveis Ver no GitHub
Suggestion
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

Abrir o 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

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.