Methods defined with `define_method` are slower to call
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 42/100
- Issue-Typ
- Dokumentation
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- ruby
- Bereich
- documentation, performance
Rechercherichtung
Beginne damit, den vorhandenen Vergleich von define_method und module_eval im Repository zu finden, und sieh dir anschließend den im Issue gezeigten Benchmark an. Als erledigt gilt, dass dokumentiert ist, dass das Aufrufen von mit define_method erstellten Methoden langsamer ist, zusammen mit dem bestehenden Vergleich der Methodendefinition und dessen Performance-Abwägung.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
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):
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.
- Vorherrschende Sprache
- Ruby
- Sterne
- 5.7k
- Forks
- 370
- Ø Merge
- 4 Std. 42 Min.
- Gemergte PRs (30 T.)
- 13
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus fastruby/fast-ruby
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 52/100
fastruby/fast-ruby#230 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 45/100
fastruby/fast-ruby#220 · 6 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 42/100
fastruby/fast-ruby#208 · 7 Kommentare · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
[FEATURE REQUEST] Use the project's WIKI to share results for each Ruby version with latest CI resultsEvtl. vergeben @JuanVqz hat das vor 6 Tagen übernommen. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 30/100
fastruby/fast-ruby#206 · 4 Kommentare · 1 Reaktion · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in fastruby/fast-ruby
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
yegor256/rubocop-elegant#92 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
ecosyste-ms/awesome#812 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
forem/forem#23933 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
rails/mission_control-jobs#347 ·
-
PROJECT: ILR/DRS
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
thewca/worldcubeassociation.org#15914 ·
Maintainer antworten meist innerhalb von 1 Tag