Porque é que as pessoas dizem que a Ruby é lenta? [fechado]

Gosto do Ruby on Rails e uso-o em todos os meus projectos de desenvolvimento da web. Alguns anos atrás, falou-se muito sobre Rails ser um porco de memória e sobre como não escoava muito bem, mas essas sugestões foram colocadas para a cama por Gregg Pollack toma.

Ultimamente, tenho ouvido pessoas a dizer que a própria Ruby é lenta.

    Porque é que a Ruby é considerada lenta?
Não acho que a Ruby seja lenta, mas estou a usá-la para ... Faça aplicativos simples e blogs de empresas. Que tipo de projetos eu precisaria estar fazendo antes de encontrar Ruby se tornando lento? Ou esta lentidão é apenas algo que afeta todas as linguagens de programação?

  • Quais são as suas opções como programador de Ruby se você quiser lidar com esta "lentidão"?

  • Qual a versão de Ruby que melhor se adequaria a uma aplicação como Stack Overflow onde a velocidade é crítica e o tráfego é intenso?

As perguntas são: subjetivo, e eu percebo que a configuração arquitetônica (EC2 vs servidores autônomos etc) faz uma grande diferença, mas eu gostaria de ouvir o que as pessoas pensam sobre Ruby ser lento.

Finalmente, não consigo encontrar muitas notícias sobre a Ruby 2.0. presumo que estejamos a poucos anos disso, então?

Author: stephenmurdoch, 2010-03-27

14 answers

Porque é que a Ruby é considerada lenta?

Porque se você executar padrões típicos entre Ruby e outras línguas, Ruby perde.

Não acho que a Ruby seja lenta, mas depois ... mais uma vez, só estou a usá-lo para fazer aplicativos simples e blogs de empresas. Que tipo de projetos eu precisaria faz isso antes que eu encontre a Ruby a tornar-se lento? Ou esta lentidão é apenas algo que afecta toda a programação línguas?
A Ruby provavelmente não te serviria. bem, escrevendo uma aplicação de processamento de sinais digitais em tempo real, ou qualquer tipo de Sistema de controle em tempo real. Ruby (com o VMs de hoje) provavelmente sufocaria em um computador com recursos limitados, como smartphones.

Lembre-se que grande parte do processamento em suas aplicações web é realmente feito por software desenvolvido em C. por exemplo Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, muitas bibliotecas de análise, RMagick, TCP/IP, etc são programas C usados por Ruby. Ruby fornece a cola e o negócio logico.

Quais são as tuas opções como Rubi? programador se quiser lidar com esta "lentidão"?
Muda para uma linguagem mais rápida. Mas isso tem um custo. É um custo que pode valer a pena. Mas para a maioria das aplicações web, a escolha da linguagem não é um fator relevante porque não há apenas tráfego suficiente justificar a utilização de uma linguagem mais rápida que custa muito mais para se desenvolver.
Qual é a versão do Ruby que fica melhor vestida? uma aplicação como a pilha Estouro onde a velocidade é crítica e o tráfego é intenso?
Outras pessoas responderam a isso-Jr., IronRuby, REE fará com que a parte Ruby de sua aplicação corra mais rápido em plataformas que possam pagar o VMs. E como muitas vezes não é Ruby que causa lentidão, mas sua arquitetura de Sistema de computador e arquitetura de aplicação, você pode fazer coisas como replicação de banco de dados, múltiplos servidores de Aplicação, loadbalancing com proxies reversos, cache HTTP, memcache, Ajax, lado cliente caching, etc. Nada disto é Ruby.
Finalmente, não consigo encontrar muitas notícias Ruby 2.0 - acho que somos alguns bons anos longe disso, então?
A maioria das pessoas está à espera do Ruby 1.9.1. Eu próprio estou à espera do Rails 3.1 na Ruby 1.9.1 na Jr.

Finalmente, lembre-se que muitos programadores escolhem o Ruby porque ele torna a programação uma experiência mais alegre em comparação com outras linguagens, e porque o Ruby with Rails permite aos programadores web qualificados desenvolver aplicações muito rapidamente.

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

Em primeiro lugar, mais devagar em relação ao que? C? Python? Vamos arranjar alguns números no jogo de Benchmarks de Linguagem de Computador.:

Porque é que a Ruby é considerada lenta?
Depende de quem perguntares. Pode-se dizer que:
  • Ruby é uma linguagem interpretada e as linguagens interpretadas tenderão a ser mais lentas do que as compiladas
  • Ruby usa recolha de lixo (embora C#, que também usa recolha de lixo, sai duas ordens de magnitude à frente de Ruby, Python, PHP etc. mais algorithmic, less memory-allocation-intensive benchmarks above)
  • Ruby As chamadas do método são lentas {[[3]} (embora, por causa da datilografia de patos, elas são indiscutivelmente mais rápidas do que em linguagens interpretadas fortemente tipadas)
  • O Ruby (com excepção do Jr.) Não Suporta a multi-leitura verdadeira
  • etc.
Mas, por outro lado, lento em relação a quê? Ruby 1.9 é tão rápido quanto Python e PHP (dentro de um fator de desempenho 3x) quando comparado com C( que pode ser até 300x mais rápido), assim o acima (com a exceção de considerações de rosca, se sua aplicação depender fortemente deste aspecto) são em grande parte acadêmicos.
Quais são as suas opções como programador de Ruby se quiser lidar com esta "lentidão"?

Escreva para a escalabilidade e jogue mais hardware nele (por exemplo, memória)

Qual a versão do Ruby que melhor se adequaria a uma aplicação como o estouro de pilha onde a velocidade é crítica e o trânsito é intenso?

Bem ... , REE (combinado com passageiro) seria um óptimo candidato.
 118
Author: vladr, 2017-05-23 11:47:28
Eis o que o criador dos carris, David Heinemeier Hansson, tem a dizer:
Os trilhos são para a grande maioria. de aplicações web rápido o suficiente. O tem sites fazendo milhões de dinâmicos vistas de página por dia. Se acabares estar com a frente Yahoo ou Amazon page, é improvável que um fora da prateleira em qualquer a linguagem vai fazer-te muito bem. Tu vais ... provavelmente tens de rolar o teu próprio. Mas claro, Também quero ciclos de CPU grátis. I acontecer para se preocupar muito mais com ciclos de desenvolvimento livres e disponibilidade de am trocar o primeiro pelo segundo.
Ou seja, atirar mais hardware ou máquinas para o problema é mais barato do que contratar mais desenvolvedores e usar uma linguagem mais rápida, mas mais difícil de manter. Afinal, poucas pessoas escrevem aplicações web em C.

Ruby 1.9 é uma grande melhoria em relação a 1.8. Os maiores problemas com Ruby 1.8 são a sua natureza interpretada (nenhum bytecode, nenhuma compilação) e que o método chama, um dos mais operações comuns em Ruby, são particularmente lentas.

Não ajuda que praticamente tudo seja uma pesquisa de método em Ruby - adicionando dois números, indexando um array. Onde outras linguagens expõem hacks (método Python's __add__, Perl's overload.pm) Ruby does pure OO in all cases, and this can hurt performance if the compiler/interpreter is not clever enough.

Se eu estivesse escrevendo uma aplicação popular na web em Ruby, meu foco seria em cache. O Cache de uma página reduz o processamento hora de essa página para zero, qualquer que seja a linguagem que você está usando. Para aplicações web, a sobrecarga de banco de dados e outros I/O começa a importar muito mais do que a velocidade da linguagem, então eu me concentrava em otimizar isso.
 58
Author: rjh, 2010-03-27 15:56:01
Escrever código é lento. Ler código é lento. Encontrar e consertar bugs é lento. Adicionar recursos e melhorias é lento. Qualquer coisa que melhore o anterior é uma vitória. Muito raramente a execução é um problema.
 33
Author: James K Polk, 2010-03-27 15:50:33

A resposta é simples: as pessoas dizem que ruby é lenta porque é lenta com base em comparações medidas com outras línguas. Tenha em mente, porém," lento " é relativo. Muitas vezes, ruby e outras línguas "lentas" são bastante rápido o suficiente.

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

Joel on Software-Ruby Performance Revisited muito bem explicado. Mas pode estar desactualizado...

Eu recomendaria que ficasses com ele como estás habituado ao Rubi nos carris. se você alguma vez encontrar um problema de performance você pode reconsiderar para usar uma linguagem e um framework diferentes. Nesse caso, eu sugeriria mesmo C# com ASP.NET MVC 2 , funciona muito bem para aplicativos CRUD.
 4
Author: Tom Wijsman, 2010-03-27 15:59:54
Eu diria que a Ruby é lenta, porque não foi gasto muito esforço para tornar o intérprete mais rápido. O mesmo se aplica ao Python. O Smalltalk é tão dinâmico como o Ruby ou o Python, mas tem um melhor desempenho em termos de magnitude, veja http://benchmarksgame.alioth.debian.org . dado que o Smalltalk foi mais ou menos substituído por Java e C# (isto é, há pelo menos 10 anos), não foi feito mais trabalho de optimização de desempenho para ele e o Smalltalk ainda é muito mais rápido do que o Ruby e o Python. As pessoas da Xerox Parc e at OTI/IBM tinham o dinheiro para pagar as pessoas que trabalham em fazer Smalltalk mais rápido. O que eu não entendo é porque o Google não gasta o dinheiro para fazer Python mais rápido como eles são uma grande loja de Python. Em vez disso, gastam dinheiro no desenvolvimento de línguas como Go...
 4
Author: OlliP, 2015-01-22 08:57:58
Em primeiro lugar, importa-se com o que os outros dizem sobre a língua de que gosta? Quando faz o trabalho que tem de fazer, estás bem. OO não é a maneira mais rápida de executar o código, mas ajuda na criação do Código. O código inteligente é sempre mais rápido do que um código estúpido e laços inúteis. Eu sou um DBA e ver um monte destes loops inúteis, deixá-los, usar melhor código e consultas e aplicação é mais rápido, muito mais rápido. Importas-te com o último microssegundo? Você pode ter línguas otimizadas para speed, outros apenas fazem o trabalho que têm que fazer e podem ser mantidos por muitos programadores diferentes. É tudo uma escolha.
 2
Author: Frank Heikens, 2010-03-27 16:29:59
Obviamente, falar de speed Ruby perde. Mesmo que os testes benchmark sugerem que Ruby não é muito mais lento do que PHP. Mas em troca, você está ficando fácil de manter o código seco, o melhor de todos os frameworks em várias línguas.

Para um projeto pequeno, você não vai sentir qualquer lentidão (quero dizer, até cerca de Para um projecto maior, pagar os recursos compensa e é mais barato. do que os salários dos promotores. Além disso, escrever código em RoR acaba por ser muito mais rápido do que qualquer outro.

Em 2014 esta magnitude da diferença de velocidade de que estás a falar é insignificante para a maioria dos sites.

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

A forma de lidar com o desempenho da Ruby Na aplicação Web é a mesma que em qualquer outra linguagem de programação:

Arquitectura

Isto é mais fácil de fazer nos carris do que na maioria dos outros Frameworks Web.

no nível de Aplicação , Por cache o que é suposto ser cache e Gerindo o acesso ao DB de uma forma inteligente (uma vez que o gargalo é geralmente no acesso "DB" para a maioria das aplicações WEB).

Os carris tornam tudo muito fácil e é natural resolver estes problemas. existem várias abstrações para dados de cache, páginas e fragmentos , e também existem abstrações muito boas para lidar com a parte SQL de uma forma otimizada e reutilizável (Registo Ativo e AREL).

Esta é a razão pela qual tantas aplicações escritas em linguagens mais rápidas e não tão expressivas (como php) acabam sendo mais lentas que as homólogas em Ruby. Não é tão fácil e elegante de lidar com cache e questionamento com estas línguas do que a Ruby.

ao nível da infra-estrutura é razoável pensar no equilíbrio de cargas e em tudo o que eu não sei muito sobre isso. Eu terceirizaria esse problema contratando alguma plataforma como prestadora de serviços, como o Heroku ([15]}ou o motor Yard . Assim. A implantação de Carris com balanceamento de carga provavelmente não é muito difícil de fazer.

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

Ruby é mais lento do que C++ em um número de tarefas facilmente mensuráveis (por exemplo, fazer código que é fortemente dependente de ponto flutuante). Isto não é muito surpreendente, mas justificação suficiente para algumas pessoas dizer que "Ruby é lento" sem qualificação. Eles não contam o fato de que é muito mais fácil e seguro escrever código Ruby do que C++.

A melhor solução é usar módulos específicos escritos noutra língua (por exemplo, C, C++, Fortran) no seu código Ruby. Aqueles podem fazer o trabalho pesado e seus scripts podem se concentrar em questões de coordenação de alto nível.

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

O desempenho é quase sempre sobre um bom design e interacções optimizadas em bases de dados. Ruby faz o que a maioria dos sites precisam muito rápido, especialmente versões mais recentes; e a velocidade de desenvolvimento e facilidade de manutenção fornece um grande pagamento em custos e em manter os clientes felizes. Eu acho que JAVA para ter desempenho de execução lento para algumas tarefas, e dada a dificuldade de desenvolver em JAVA, muitos desenvolvedores criam aplicações lentas, independentemente da capacidade teórica de velocidade como demonstrado em benchmarks (benchmarks são geralmente inventariados para mostrar uma capacidade específica e estreita). Quando eu preciso de processamento intensivo que não é adequado para as capacidades do meu banco de dados, eu escolho C ou Objective-C ou alguma outra linguagem compilada de alto desempenho para essas tarefas, dependendo da plataforma. Se eu precisar criar uma aplicação web com base de dados, eu uso RoR ou às vezes C# ASP.NET dependendo de outros requisitos, porque todas as plataformas têm pontos fortes e pontos fracos. Execucao a velocidade das coisas que sua aplicação faz é importante, mas afinal, se o desempenho de execução de um aspecto Estreito de uma linguagem é tudo o que conta; então eu ainda poderia estar usando linguagem de montagem para tudo.

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

As pessoas dizem que o Ruby é lento porque eles comparam programas de Ruby com programas escritos em outras línguas. Talvez os programas que escreves não precisem de ser mais rápidos. Talvez para os programas que escreves a Ruby não seja o estrangulamento que está a atrasar as coisas.

Ruby 2. 1 em comparação com Javascript V8

Ruby 2.1 em comparação com Lua comum

Ruby 2.1 em comparação com Python 3

 0
Author: igouy, 2016-08-21 16:15:53
A Ruby tem um bom desempenho para a produtividade do programador. Ruby by nature forces test driven development because of the lack of types. O Ruby tem um bom desempenho quando usado como um invólucro de alto nível para bibliotecas C. Ruby também tem um bom desempenho durante processos de longa duração quando é compilado para código de máquina JIT via JVM ou Rbx VM. Ruby não funciona bem quando é necessário para crunch números em um curto período de tempo com código ruby puro.
 -5
Author: nurettin, 2014-04-17 18:35:21