Porque é que as pessoas dizem que a Ruby é lenta? [fechado]
-
Porque é que a Ruby é considerada lenta?
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?
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.
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.:
- Ruby 1, 9 vs. Python3 dentro da mesma ordem de magnitude
- Ruby 1, 9 vs. PHP dentro da mesma ordem de grandeza
- Ruby 1.9 vs. Java 6 server até duas ordens de magnitude mais lenta !
- Ruby 1, 9 vs. c (gcc) até duas ordens demagnitude mais lenta !
- ...
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.
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)
Bem ... , REE (combinado com passageiro) seria um óptimo candidato.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?
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.
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.
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.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.
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.
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.
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.
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