Ich mag Ruby on Rails und verwende es für alle meine Webentwicklungsprojekte. Vor ein paar Jahren wurde viel darüber gesprochen, dass Rails ein Erinnerungsfresser ist und dass es nicht sehr gut skaliert, aber diese Vorschläge wurden von Gregg Pollack hier ins Bett gebracht .
In letzter Zeit habe ich Leute sagen hören, dass Ruby selbst langsam ist.
- Warum wird Ruby als langsam angesehen?
Ich finde Ruby nicht langsam, aber ich verwende es nur, um einfache CRUD-Apps und Unternehmensblogs zu erstellen. Welche Art von Projekten müsste ich machen, bevor Ruby langsam wird? Oder betrifft diese Langsamkeit nur alle Programmiersprachen?
Welche Möglichkeiten haben Sie als Ruby-Programmierer, wenn Sie mit dieser "Langsamkeit" umgehen möchten?
Welche Version von Ruby eignet sich am besten für eine Anwendung wie Stack Overflow, bei der die Geschwindigkeit kritisch und der Datenverkehr intensiv ist?
Die Fragen sind subjektiv und mir ist klar, dass die Einrichtung der Architektur (EC2 gegenüber eigenständigen Servern usw.) einen großen Unterschied macht, aber ich würde gerne hören, was die Leute über Ruby denken, der langsam ist.
Schließlich kann ich nicht viele Neuigkeiten zu Ruby 2.0 finden - ich nehme an, wir sind dann ein paar Jahre davon entfernt?
quelle
Antworten:
Denn wenn Sie typische Benchmarks zwischen Ruby und anderen Sprachen ausführen, verliert Ruby.
Ruby würde Ihnen wahrscheinlich beim Schreiben einer digitalen Echtzeit-Signalverarbeitungsanwendung oder eines Echtzeit-Steuerungssystems nicht gut dienen. Ruby (mit heutigen VMs) würde wahrscheinlich an einem Computer mit eingeschränkten Ressourcen wie Smartphones ersticken.
Denken Sie daran, dass ein Großteil der Verarbeitung in Ihren Webanwendungen tatsächlich von in C entwickelter Software ausgeführt wird, z. B. Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, viele Parsing-Bibliotheken, RMagick, TCP / IP usw. sind C-Programme, die von Ruby verwendet werden . Ruby liefert den Kleber und die Geschäftslogik.
Wechseln Sie zu einer schnelleren Sprache. Das ist aber mit Kosten verbunden. Es sind Kosten, die sich lohnen können. Für die meisten Webanwendungen ist die Wahl der Sprache jedoch kein relevanter Faktor, da nicht genügend Datenverkehr vorhanden ist, um die Verwendung einer schnelleren Sprache zu rechtfertigen, deren Entwicklung viel mehr kostet.
Andere Leute haben darauf geantwortet - JRuby, IronRuby, REE sorgen dafür, dass der Ruby-Teil Ihrer Anwendung auf Plattformen, die sich die VMs leisten können, schneller ausgeführt wird. Und da es oft nicht Ruby ist, das Langsamkeit verursacht, sondern Ihre Computersystemarchitektur und Anwendungsarchitektur, können Sie Dinge wie Datenbankreplikation, mehrere Anwendungsserver, Lastausgleich mit Reverse-Proxys, HTTP-Caching, Memcache, Ajax, clientseitiges Caching usw. Ausführen Nichts davon ist Ruby.
Die meisten Leute warten auf Ruby 1.9.1. Ich selbst warte auf Rails 3.1 auf Ruby 1.9.1 auf JRuby.
Denken Sie zum Schluss daran, dass sich viele Entwickler für Ruby entscheiden, da dies das Programmieren im Vergleich zu anderen Sprachen angenehmer macht und Ruby with Rails es erfahrenen Webentwicklern ermöglicht, Anwendungen sehr schnell zu entwickeln.
quelle
Zuallererst langsamer in Bezug auf was ? C? Python? Lassen Sie uns beim Computer Language Benchmarks Game einige Zahlen ermitteln :
Kommt darauf an, wen du fragst. Man könnte sagen, dass:
Aber andererseits langsam in Bezug auf was? Ruby 1.9 ist im Vergleich zu C (das bis zu 300x schneller sein kann) ungefähr so schnell wie Python und PHP (innerhalb eines 3-fachen Leistungsfaktors). Daher sollte das oben Gesagte (mit Ausnahme von Threading-Überlegungen, falls Ihre Anwendung stark von diesem Aspekt abhängt) ) sind weitgehend akademisch.
Schreiben Sie für Skalierbarkeit und werfen Sie mehr Hardware darauf (z. B. Speicher)
Nun, REE (kombiniert mit Passagier ) wäre ein sehr guter Kandidat.
quelle
Hier ist, was der Schöpfer von Rails, David Heinemeier Hansson, zu sagen hat:
Das heißt, es ist billiger, mehr Hardware oder Maschinen auf das Problem zu werfen, als mehr Entwickler einzustellen und eine schnellere, aber schwieriger zu wartende Sprache zu verwenden. Immerhin schreiben nur wenige Leute Webanwendungen in C.
Ruby 1.9 ist eine enorme Verbesserung gegenüber 1.8. Die größten Probleme mit Ruby 1.8 sind die Interpretation (kein Bytecode, keine Kompilierung) und die Methodenaufrufe, eine der häufigsten Operationen in Ruby, sind besonders langsam.
Es hilft nicht, dass so ziemlich alles eine Methodensuche in Ruby ist - zwei Zahlen hinzufügen, ein Array indizieren. Wenn andere Sprachen Hacks verfügbar machen (Pythons
__add__
Methode, Perls overload.pm), führt Ruby in allen Fällen reine OO aus. Dies kann die Leistung beeinträchtigen, wenn der Compiler / Interpreter nicht klug genug ist.Wenn ich eine beliebte Webanwendung in Ruby schreiben würde, würde mein Fokus auf dem Caching liegen. Durch das Zwischenspeichern einer Seite wird die Verarbeitungszeit für diese Seite auf Null reduziert, unabhängig davon, welche Sprache Sie verwenden. Bei Webanwendungen spielt der Datenbank-Overhead und andere E / A-Vorgänge eine viel größere Rolle als die Geschwindigkeit der Sprache. Daher würde ich mich darauf konzentrieren, dies zu optimieren.
quelle
Das Schreiben von Code ist langsam. Das Lesen von Code ist langsam. Das Finden und Beheben von Fehlern ist langsam. Das Hinzufügen von Funktionen und Verbesserungen ist langsam. Alles, was sich gegenüber dem vorherigen verbessert, ist ein Gewinn. Sehr selten ist die Ausführungsleistung ein Problem.
quelle
Die Antwort ist einfach: Leute sagen , Rubin langsam ist , weil es sich langsam auf , gemessen Vergleiche zu anderen Sprachen basiert. Bedenken Sie jedoch, dass "langsam" relativ ist. Oft sind Ruby und andere "langsame" Sprachen schnell genug.
quelle
Joel über Software - Ruby Performance Revisited erklärt es recht gut. Könnte aber veraltet sein ...
Ich würde empfehlen, einfach dabei zu bleiben, da Sie an Ruby on Rails gewöhnt sind.
Wenn Sie jemals auf ein Leistungsproblem stoßen, sollten Sie die Verwendung einer anderen Sprache und eines anderen Frameworks überdenken.
In diesem Fall würde ich C # mit ASP.NET MVC 2 wirklich empfehlen , funktioniert sehr gut für CRUD-Apps.
quelle
Ich würde sagen, Ruby ist langsam, weil nicht viel Mühe darauf verwendet wurde, den Dolmetscher schneller zu machen. Gleiches gilt für Python. Smalltalk ist genauso dynamisch wie Ruby oder Python, bietet jedoch eine um ein Vielfaches bessere Leistung (siehe http://benchmarksgame.alioth.debian.org) . Da Smalltalk mehr oder weniger durch Java und C # ersetzt wurde (dh vor mindestens 10 Jahren), wurden keine weiteren Arbeiten zur Leistungsoptimierung durchgeführt, und Smalltalk ist immer noch viel schneller als Ruby und Python. Die Leute bei Xerox Parc und bei OTI / IBM hatten das Geld, um die Leute zu bezahlen, die daran arbeiten, Smalltalk schneller zu machen. Was ich nicht verstehe, ist, warum Google nicht das Geld ausgibt, um Python schneller zu machen, da es sich um einen großen Python-Shop handelt. Stattdessen geben sie Geld für die Entwicklung von Sprachen wie Go ...
quelle
Interessiert es Sie zunächst, was andere über die Sprache sagen, die Sie mögen? Wenn es den Job macht, den es machen muss, geht es dir gut.
OO ist nicht der schnellste Weg, um Code auszuführen, aber es hilft beim Erstellen des Codes. Smart Code ist immer schneller als dummer Code und nutzlose Schleifen. Ich bin ein DBA und sehe viele dieser nutzlosen Schleifen, lösche sie, verwende besseren Code und Abfragen und die Anwendung ist schneller, viel schneller. Interessiert dich die letzte Mikrosekunde? Möglicherweise sind die Sprachen auf Geschwindigkeit optimiert, andere erledigen nur die Aufgabe, die sie zu erledigen haben, und können von vielen verschiedenen Programmierern verwaltet werden.
Es ist alles nur eine Wahl.
quelle
Offensichtlich verliert Ruby an Geschwindigkeit. Obwohl Benchmark-Tests darauf hindeuten, dass Ruby nicht so viel langsamer als PHP ist. Im Gegenzug erhalten Sie einfach zu wartenden DRY-Code, den besten aller Frameworks in verschiedenen Sprachen.
Bei einem kleinen Projekt werden Sie keine Langsamkeit spüren (ich meine bis zu <50.000 Benutzern), da im Code keine komplexen Berechnungen verwendet werden, sondern nur das Mainstream-Material.
Bei einem größeren Projekt zahlt sich die Bezahlung von Ressourcen aus und ist billiger als die Entwicklerlöhne. Darüber hinaus ist das Schreiben von Code in RoR viel schneller als jedes andere.
Im Jahr 2014 ist diese Größe des Geschwindigkeitsunterschieds, von dem Sie sprechen, für die meisten Websites unbedeutend.
quelle
Der Umgang mit Rubys Leistung in Webanwendungen ist der gleiche wie mit jeder anderen Programmiersprache:
DIE ARCHITEKTUR
Dies ist in Rails einfacher als in den meisten anderen Web Frameworks.
Auf Anwendungsebene durch Zwischenspeichern der zu zwischengespeicherten Daten und durch intelligentes Verwalten des Zugriffs auf die Datenbank (da der Engpass bei den meisten WEB-Apps normalerweise beim Zugriff auf die Datenbank liegt).
Rails macht es sehr einfach und natürlich, diese Probleme zu lösen. Es gibt verschiedene Abstraktionen zum Zwischenspeichern von Daten, Seiten und Fragmenten sowie sehr schöne Abstraktionen, um den SQL-Teil optimiert und wiederverwendbar zu behandeln ( Active Record und AREL ).
Dies ist der Grund, warum so viele Anwendungen, die in schnelleren und weniger ausdrucksstarken Sprachen (wie PHP) geschrieben sind, langsamer sind als die Ruby-Gegenstücke. Es ist nicht so einfach und elegant, das Zwischenspeichern und Abfragen mit diesen Sprachen anzugehen, wie mit Ruby.
Auf der Infrastrukturebene ist es vernünftig, an Lastausgleich und all das zu denken, über das ich nicht viel weiß. Ich würde dieses Problem auslagern, indem ich eine Plattform als Dienstleister wie Heroku oder Engine Yard anheuere . Wie auch immer. Die Bereitstellung von Schienen mit Lastausgleich ist wahrscheinlich nicht sehr schwierig.
quelle
Ruby ist bei einer Reihe leicht messbarer Aufgaben langsamer als C ++ (z. B. bei Code, der stark vom Gleitkomma abhängt). Dies ist nicht sehr überraschend, aber genug Rechtfertigung für einige Leute, um zu sagen, dass „Ruby is Slow“ ohne Qualifikation ist. Sie zählen nicht die Tatsache, dass es viel einfacher und sicherer ist, Ruby-Code zu schreiben als C ++.
Die beste Lösung besteht darin, in Ihrem Ruby-Code gezielte Module zu verwenden, die in einer anderen Sprache (z. B. C, C ++, Fortran) geschrieben sind. Diese können das schwere Heben erledigen und Ihre Skripte können sich auf Koordinationsprobleme auf höherer Ebene konzentrieren.
quelle
Bei der Leistung geht es fast immer um gutes Design und optimierte Datenbankinteraktionen. Ruby erledigt das, was die meisten Websites benötigen, recht schnell, insbesondere neuere Versionen. Die Geschwindigkeit der Entwicklung und die einfache Wartung sorgen für einen hohen Kostenaufwand und für die Zufriedenheit der Kunden. Ich finde, dass JAVA für einige Aufgaben eine langsame Ausführungsleistung aufweist. Angesichts der Schwierigkeit, in JAVA zu entwickeln, erstellen viele Entwickler langsame Anwendungen, unabhängig von der theoretischen Geschwindigkeitsfähigkeit, wie in Benchmarks gezeigt (Benchmarks weisen im Allgemeinen eine bestimmte und enge Fähigkeit auf). Wenn ich eine intensive Verarbeitung benötige, die für die Funktionen meiner Datenbank nicht gut geeignet ist, wähle ich je nach Plattform C oder Objective-C oder eine andere wirklich leistungsstarke kompilierte Sprache für diese Aufgaben. Wenn ich eine datenbankbasierte Webanwendung erstellen muss, Ich verwende RoR oder manchmal C # ASP.NET, abhängig von anderen Anforderungen. weil alle Plattformen Stärken und Schwächen haben. Die Ausführungsgeschwindigkeit der Aufgaben Ihrer Anwendung ist wichtig, aber schließlich zählt nur die Ausführungsleistung eines engen Aspekts einer Sprache. dann verwende ich möglicherweise immer noch die Assembler-Sprache für alles.
quelle
Die Leute sagen, dass Ruby langsam ist, weil sie Ruby-Programme mit Programmen vergleichen, die in anderen Sprachen geschrieben wurden. Vielleicht müssen die Programme, die Sie schreiben, nicht schneller sein. Vielleicht ist Ruby für die Programme, die Sie schreiben, nicht der Engpass , der die Dinge verlangsamt.
Ruby 2.1 im Vergleich zu Javascript V8
Ruby 2.1 im Vergleich zu gewöhnlichen Lua
Ruby 2.1 im Vergleich zu Python 3
quelle
Ruby bietet eine gute Leistung für die Entwicklerproduktivität. Ruby erzwingt von Natur aus eine testgetriebene Entwicklung, da es an Typen mangelt. Ruby funktioniert gut, wenn es als High-Level-Wrapper für C-Bibliotheken verwendet wird. Ruby funktioniert auch bei lang laufenden Prozessen gut, wenn es über JVM oder Rbx VM mit JIT-kompiliert wird, um Code zu maschinieren. Ruby funktioniert nicht gut, wenn es erforderlich ist, Zahlen in kurzer Zeit mit reinem Ruby-Code zu knacken.
quelle