fastruby / fastruby/fast-ruby

Methods defined with `define_method` are slower to call

オープン
#22 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
Suggestion
主要言語
Ruby
スター
5.7k
フォーク
371
PR マージ指標
30日以内にマージされた PR はありません

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。