Methods defined with `define_method` are slower to call
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 42/100
- Type d'issue
- Documentation
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- ruby
- Domaine
- documentation, performance
Piste de recherche
Commencez par localiser dans le dépôt la comparaison existante entre define_method et module_eval, puis examinez le benchmark présenté dans l’issue. Le travail sera considéré comme terminé lorsqu’il sera documenté que l’appel de méthodes créées avec define_method est plus lent, parallèlement à la comparaison existante de la définition des méthodes et à son compromis en matière de performances.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Ruby
- Étoiles
- 5.7k
- Forks
- 370
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de fastruby/fast-ruby
-
Difficulté 2/5 1-3 heures Accessibilité débutants 52/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 32/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 42/100
Toutes les issues de fastruby/fast-ruby
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
TheOdinProject/curriculum#31423 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
oxidize-rb/rb-sys#807 ·