Pourquoi les gens disent-ils que Ruby est lent? [fermé]


J'aime Ruby on Rails et je l'utilise pour tous mes projets de développement web. Il y a quelques années on a beaucoup parlé de Rails étant un porc de mémoire et de la façon dont il ne s'est pas très bien mis à l'échelle mais ces suggestions ont été mises au lit par Gregg Pollack ici .

Dernièrement cependant, j'ai entendu des gens dire que Ruby lui-même est lent.

  • Pourquoi Ruby est-il considéré comme lent?

Je ne trouve pas Ruby lent mais là encore, je l'utilise juste pour faire applications CRUD simples et blogs d'entreprise. Quel genre de projets devrais-je faire avant de trouver Ruby devenir lent? Ou cette lenteur est-elle juste quelque chose qui affecte tous les langages de programmation?

  • Quelles sont vos options en tant que programmeur Ruby si vous voulez faire face à cette "lenteur"?

  • Quelle version de Ruby conviendrait le mieux à une application comme Stack Overflow où la vitesse est critique et le trafic intense?

Les questions sont subjectives, et je me rends compte que la configuration architecturale (EC2 vs serveurs autonomes, etc.) fait une grande différence, mais j'aimerais entendre ce que les gens pensent de la lenteur de Ruby.

Enfin, je ne trouve pas beaucoup de nouvelles sur Ruby 2.0 - Je suppose que nous sommes à quelques années de cela alors?

Author: stephenmurdoch, 2010-03-27

14 answers

Pourquoi Ruby est-il considéré comme lent?

Parce que si vous exécutez des benchmarks typiques entre Ruby et d'autres langages, Ruby perd.

Je ne trouve pas Ruby lent mais alors encore une fois, je l'utilise juste pour faire applications CRUD simples et blogs d'entreprise. De quel genre de projets aurais-je besoin faire avant que je trouve Ruby devenir lent? Ou cette lenteur est-elle juste quelque chose qui affecte toute la programmation langues?

Ruby ne vous servirait probablement pas bien en écrivant une application de traitement du signal numérique en temps réel, ou tout type de système de contrôle en temps réel. Ruby (avec les machines virtuelles d'aujourd'hui) s'étouffe probablement sur un ordinateur à ressources limitées tel que les smartphones.

Rappelez-vous qu'une grande partie du traitement sur vos applications Web est en fait effectuée par des logiciels développés en C. par exemple Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, de nombreuses bibliothèques d'analyse, RMagick, TCP/IP, etc. sont des programmes C utilisés par Ruby. Ruby fournit la colle et la logique métier.

Quelles sont vos options en tant que Ruby programmeur si vous voulez traiter avec cette "lenteur"?

Passez à une langue plus rapide. Mais ce qui a un coût. C'est un coût qui peut en valoir la peine. Mais pour la plupart des applications Web, le choix de la langue n'est pas un facteur pertinent car il n'y a tout simplement pas assez de trafic pour justifier l'utilisation d'un langage plus rapide qui coûte beaucoup plus cher à développer.

Quelle version de Ruby conviendrait le mieux une application comme Stack Overflow où la vitesse est critique et le trafic est intense?

D'autres personnes ont répondu à cela - JRuby, IronRuby, REE fera fonctionner la partie Ruby de votre application plus rapidement sur les plates-formes qui peuvent se permettre les machines virtuelles. Et comme ce n'est souvent pas Ruby qui cause la lenteur, mais l'architecture de votre système informatique et de votre architecture d'application, vous pouvez faire des choses comme la réplication de base de données, plusieurs serveurs d'applications, l'équilibrage de charge avec des proxys inverses, la mise en cache HTTP, memcache, Ajax, la mise en cache côté client, etc. Rien de tout ça n'est Ruby.

Enfin, je ne trouve pas beaucoup de nouvelles sur Ruby 2.0 - Je suppose que nous sommes un bon nombre ans de qui alors?

La plupart des gens attendent Ruby 1.9.1. J'attends moi-même Rails 3.1 sur Ruby 1.9.1 sur JRuby.

Enfin, n'oubliez pas que beaucoup de développeurs choisissent Ruby parce que cela rend la programmation plus joyeuse que d'autres langages, et parce que Ruby avec Rails permet aux développeurs Web qualifiés de développer applications très rapidement.

 174
Author: Jay Godse, 2010-03-28 05:11:04

Tout d'Abord, plus lent par rapport à ce que? C? Python? Let's obtenir certains nombres à le Langage de l'Ordinateur Repères de Jeu:

Pourquoi Ruby est-il considéré comme lent?

Dépend de qui vous demandez. On pourrait vous dire que:

  • Ruby est un langage interprété et les langages interprétés auront tendance à être plus lents que les langages compilés
  • Ruby utilisegarbage collection (bien que C#, qui utilise également garbage collection, sorte deux ordres de grandeur devant Ruby, Python, PHP etc. dans le plus algorithmique, moins benchmarks gourmands en allocation de mémoire ci-dessus)
  • Les appels de méthode Ruby sont lents (bien que, à cause du typage de canard, ils soient sans doute plus rapides que dans les langages interprétés fortement typés)
  • Ruby (à l'exception de JRuby) ne prend pas en charge vrai multithreading
  • etc.

Mais, là encore, lent par rapport à quoi? Ruby 1.9 est à peu près aussi rapide que Python et PHP (dans un facteur de performance 3x) par rapport à C (qui peut être en hausse 300x plus rapide), donc ce qui précède (à l'exception des considérations de threading, si votre application dépend fortement de cet aspect) est en grande partie académique.

Quelles sont vos options en tant que programmeur Ruby si vous voulez faire face à cette "lenteur"?

Écrivez pour l'évolutivité et lancez plus de matériel (par exemple, la mémoire)

Quelle version de Ruby conviendrait le mieux à une application comme Stack Overflow où la vitesse est critique et le trafic est intense?

Bien, REE (combiné avec Passager) serait un très bon candidat.

 118
Author: vladr, 2017-05-23 11:47:28

Voici ce que le créateur de Rails, David Heinemeier Hansson a à dire:

Rails [Ruby] est, pour la grande majorité des applications web Assez rapidement. Nous vous avez des sites qui font des millions de dynamiques pages vues par jour. Si vous vous retrouvez être avec le front Yahoo ou Amazon page, il est peu probable qu'un hors-la-étagère cadre de TOUTE la langue vous fera beaucoup de bien. Vous aurez probablement à rouler votre propre. Mais bien sûr, j'aimerais aussi des cycles CPU gratuits. Je juste arriver à l' soucie beaucoup plus cycles de développeurs gratuits et je suis prêt pour échanger le premier contre le second.

C'est-à-dire lancer plus de matériel ou de machines sur le problème est moins cher que d'embaucher plus de développeurs et d'utiliser un langage plus rapide, mais plus difficile à maintenir. Après tout, peu de gens écrivent des applications Web en C.

Ruby 1.9 est une grande amélioration par rapport à 1,8. Les plus gros problèmes avec Ruby 1.8 sont sa nature interprétée (pas de bytecode, pas de compilation) et cette méthode appelle, l'un des plus les opérations courantes en Ruby sont particulièrement lentes.

Cela n'aide pas qu'à peu près tout est une recherche de méthode dans Ruby - ajouter deux nombres, indexer un tableau. Où d'autres langages exposent des hacks (méthode __add__ de Python, méthode Perl overload.pm) Ruby fait du OO pur dans tous les cas, et cela peut nuire aux performances si le compilateur/interprète n'est pas assez intelligent.

Si j'écrivais une application Web populaire dans Ruby, je me concentrerais sur la mise en cache. La mise en cache d'une page réduit le traitement temps pour cette page à zéro, quelle que soit la langue que vous utilisez. Pour les applications Web, les frais généraux de base de données et autres E/S commencent à compter beaucoup plus que la vitesse du langage, donc je me concentrerais sur l'optimisation de cela.

 58
Author: rjh, 2010-03-27 15:56:01

L'écriture du code est lente. La lecture du code est lente. Trouver et corriger des bugs est lent. L'ajout de fonctionnalités et d'améliorations est lent. Tout ce qui améliore le précédent est une victoire. Très rarement, les performances d'exécution sont un problème.

 33
Author: James K Polk, 2010-03-27 15:50:33

La réponse est simple: les gens disent que ruby est lent car il est lent sur la base de comparaisons mesurées avec d'autres langues. Gardez à l'esprit, cependant, "lent" est relatif. Souvent, ruby et d'autres langues "lentes" sont assez rapides.

 14
Author: Bryan Oakley, 2010-03-27 16:02:59

Joel sur le logiciel-Ruby Performance Revisited très bien explique. Peut - être obsolète cependant...

Je recommanderais de simplement m'en tenir à cela car vous êtes habitué à Ruby on Rails,
si jamais vous rencontrez un problème de performance, vous pourriez reconsidérer l'utilisation d'un langage et d'un cadre différents.

Dans ce cas, je suggérerais vraiment C # avec ASP.NET MVC 2 , fonctionne très bien pour les applications CRUD.

 4
Author: Tom Wijsman, 2010-03-27 15:59:54

Je dirais que Ruby est lent car peu d'efforts ont été déployés pour rendre l'interpréteur plus rapide. Même s'applique à Python. Smalltalk est tout aussi dynamique que Ruby ou Python mais fonctionne mieux d'une magnitude, voir http://benchmarksgame.alioth.debian.org . Depuis que Smalltalk a été plus ou moins remplacé par Java et C# (c'est-à-dire il y a au moins 10 ans), plus aucun travail d'optimisation des performances n'avait été effectué pour cela et Smalltalk est toujours beaucoup plus rapide que Ruby et Python. Les gens de Xerox Parc et chez OTI / IBM avait l'argent pour payer les gens qui travaillent à rendre Smalltalk plus rapide. Ce que je ne comprends pas, c'est pourquoi Google ne dépense pas l'argent pour rendre Python plus rapide car il s'agit d'un grand magasin Python. Au lieu de cela, ils dépensent de l'argent pour le développement de langues comme Go...

 4
Author: OlliP, 2015-01-22 08:57:58

Tout d'abord, vous souciez-vous de ce que les autres disent de la langue que vous aimez? Quand il fait le travail qu'il doit faire, vous allez bien.

OO n'est pas le moyen le plus rapide d'exécuter du code, mais cela aide à créer le code. Le code intelligent est toujours plus rapide que le code stupide et les boucles inutiles. Je suis un DBA et je vois beaucoup de ces boucles inutiles, je les dépose, j'utilise un meilleur code et des requêtes et l'application est plus rapide, beaucoup plus rapide. Vous souciez - vous de la dernière microseconde? Vous pourriez avoir des langues optimisées pour vitesse, d'autres font juste le travail qu'ils ont à faire et peuvent être maintenus par de nombreux programmeurs différents.

Tout est juste un choix.

 2
Author: Frank Heikens, 2010-03-27 16:29:59

Évidemment, parler de vitesse Ruby perd. Même si les tests de référence suggèrent que Ruby n'est pas tellement plus lent que PHP. Mais en retour, vous obtenez du code SEC facile à maintenir, le meilleur de tous les frameworks dans différentes langues.

Pour un petit projet, vous ne ressentirez aucune lenteur (je veux dire jusqu'à ce que

Pour un projet plus important, payer des ressources est rentable et moins cher que développeur salaires. De plus, l'écriture de code sur RoR s'avère beaucoup plus rapide que tout autre.

En 2014, cette différence de vitesse dont vous parlez est insignifiante pour la plupart des sites Web.

 2
Author: Rápli András, 2014-04-29 11:41:36

La façon de gérer les performances de Ruby dans l'application Web est la même qu'avec n'importe quel autre langage de programmation:

ARCHITECTURE

C'est plus facile à faire dans Rails que dans la plupart des autres frameworks Web.

Au niveau de l'application, en mettant en cache tout ce qui est censé être mis en cache et en gérant l'accès à la base de données de manière intelligente (car le goulot d'étranglement est généralement sur l'accès "DB" pour la plupart des applications WEB).

Rails le rend très facile et naturelle pour résoudre ces problèmes. Il y a plusieurs abstractions pour mettre en cache des données, des pages et des fragments, et il y a aussi de très belles abstractions pour traiter la partie SQL de manière optimisée et réutilisable ( Active Recordet AREL).

C'est la raison pour laquelle tant d'applications écrites dans des langages plus rapides et moins expressifs (comme php) finissent par être plus lentes que les homologues Ruby. Ce n'est pas si facile et élégant de s'attaquer à la mise en cache et à l'interrogation avec ces langues qu'il est avec Ruby.

Au niveau de l'infrastructure , il est raisonnable de penser à l'équilibrage de charge et à toutes ces choses que je ne connais pas beaucoup. J'externaliserais ce problème en embauchant une plate-forme en tant que fournisseur de services, comme Heroku ou Engine Yard. De toute façon. Déployer des rails avec équilibrage de charge n'est probablement pas très difficile à faire.

 2
Author: Pedro Morte Rolo, 2014-07-23 10:04:39

Ruby est plus lent que C++ pour un certain nombre de tâches facilement mesurables (par exemple, faire du code qui dépend fortement de la virgule flottante). Ce n'est pas très surprenant, mais une justification suffisante pour que certaines personnes disent que "Ruby est lent" sans qualification. Ils ne comptent pas le fait qu'il est beaucoup plus facile et plus sûr d'écrire du code Ruby que C++.

La meilleure solution consiste à utiliser des modules ciblés écrits dans un autre langage (par exemple, C, C++, Fortran) dans votre code Ruby. Ceux-ci peuvent faire le levage lourd et vos scripts peuvent se concentrer sur des problèmes de coordination de niveau supérieur.

 1
Author: Donal Fellows, 2010-03-27 15:57:15

La performance est presque toujours une bonne conception et des interactions de base de données optimisées. Ruby fait ce que la plupart des sites Web ont besoin assez rapide, en particulier les versions plus récentes; et la vitesse de développement et la facilité de maintenance fournit un gain important en coûts et en gardant les clients heureux. Je trouve que JAVA a des performances d'exécution lentes pour certaines tâches, et compte tenu de la difficulté de développement en JAVA, de nombreux développeurs créent des applications lentes indépendamment de la capacité de vitesse théorique comme démontré dans les repères (les repères sont généralement conçus pour montrer une capacité spécifique et étroite). Lorsque j'ai besoin d'un traitement intensif qui ne convient pas aux capacités de ma base de données, je choisis C ou Objective-C ou un autre langage compilé vraiment performant pour ces tâches en fonction de la plate-forme. Si j'ai besoin de créer une application Web basée sur des données, j'utilise RoR ou parfois C# ASP.NET en fonction d'autres exigences; parce que toutes les plates-formes ont des forces et des faiblesses. Exécution la vitesse des choses que votre application fait est importante, mais après tout, si les performances d'exécution d'un aspect étroit d'un langage sont tout ce qui compte; alors je pourrais toujours utiliser le langage Assembleur pour tout.

 0
Author: Richard, 2013-05-02 15:56:11

Les gens disent que Ruby est lent parce qu'ils comparent les programmes Ruby aux programmes écrits dans d'autres langues. Peut-être que les programmes que vous écrivez n'ont pas besoin d'être plus rapides. Peut-être que pour les programmes que vous écrivez, Ruby n'est pas le goulot d'étranglement qui ralentit les choses.

Ruby 2.1 par rapport à Javascript V8

Ruby 2.1 comparé au Lua ordinaire

Ruby 2.1 par rapport à Python 3

 0
Author: igouy, 2016-08-21 16:15:53

Rubis fonctionne bien pour la productivité des développeurs. Ruby par nature force le développement piloté par les tests en raison du manque de types. Ruby fonctionne bien lorsqu'il est utilisé comme wrapper de haut niveau pour les bibliothèques C. Ruby fonctionne également bien pendant les processus de longue durée lorsqu'il est compilé en JIT en code machine via JVM ou Rbx VM. Ruby ne fonctionne pas bien quand il est nécessaire de croquer des nombres en peu de temps avec du code ruby pur.

 -5
Author: nurettin, 2014-04-17 18:35:21