Lubię Ruby on Rails i używam go do wszystkich moich projektów programistycznych. Kilka lat temu było dużo gadania o Szyny bycia wieprz i pamięć o tym, jak to nie skala bardzo dobrze, ale te sugestie zostały wprowadzone do łóżka przez Gregg Pollack tutaj .
Ostatnio słyszę, jak ludzie mówią, że sama Ruby jest powolna.
- Dlaczego Ruby jest uważana za powolną?
Nie uważam, aby Ruby była powolna, ale z drugiej strony po prostu używam jej do tworzenia prostych aplikacji CRUD i blogów firmowych. Jakie projekty muszę wykonać, zanim uzmysłowię sobie, że Ruby robi się wolna? A może ta spowolnienie jest czymś, co wpływa na wszystkie języki programowania?
Jakie masz opcje jako programista Ruby, jeśli chcesz poradzić sobie z tą „powolnością”?
Która wersja Ruby najlepiej pasuje do aplikacji takich jak Przepełnienie stosu, w których prędkość jest krytyczna, a natężenie ruchu jest duże?
Pytania są subiektywne i zdaję sobie sprawę, że konfiguracja architektoniczna (EC2 vs. samodzielne serwery itp.) Robi dużą różnicę, ale chciałbym usłyszeć, co ludzie myślą o powolności Ruby.
Wreszcie, nie mogę znaleźć wielu wiadomości na temat Ruby 2.0 - Rozumiem, że od tego czasu dzieli nas już dobre kilka lat?
źródło
Odpowiedzi:
Ponieważ jeśli uruchomisz typowe testy porównawcze między Ruby i innymi językami, Ruby przegrywa.
Ruby prawdopodobnie nie posłużyłby ci dobrze w pisaniu aplikacji do cyfrowego przetwarzania sygnałów w czasie rzeczywistym lub jakiegokolwiek innego systemu kontroli w czasie rzeczywistym. Ruby (przy dzisiejszych maszynach wirtualnych) prawdopodobnie dusiłby się na komputerze o ograniczonych zasobach, takim jak smartfony.
Pamiętaj, że większość przetwarzania w twoich aplikacjach internetowych jest faktycznie wykonywana przez oprogramowanie opracowane w C. np. Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, wiele bibliotek parsujących, RMagick, TCP / IP itp. To programy C używane przez Ruby . Ruby zapewnia klej i logikę biznesową.
Przełącz na szybszy język. Ale to pociąga za sobą koszty. Jest to koszt, który może być tego wart. Jednak w przypadku większości aplikacji internetowych wybór języka nie ma znaczenia, ponieważ ruch jest zbyt mały, aby usprawnić użycie szybszego języka, którego opracowanie kosztuje znacznie więcej.
Inni ludzie odpowiedzieli na to pytanie - JRuby, IronRuby, REE sprawią, że Ruby będzie częścią twojej aplikacji działającą szybciej na platformach, na które stać Cię na maszyny wirtualne. A ponieważ często to nie Ruby powoduje spowolnienie, ale architektura systemu komputerowego i architektura aplikacji, możesz robić takie rzeczy, jak replikacja bazy danych, wiele serwerów aplikacji, równoważenie obciążenia z odwrotnymi serwerami proxy, buforowanie HTTP, memcache, Ajax, buforowanie po stronie klienta itp. , Żadna z tych rzeczy nie jest Ruby.
Większość ludzi czeka na Ruby 1.9.1. Sam czekam na Rails 3.1 na Ruby 1.9.1 na JRuby.
Na koniec pamiętaj, że wielu programistów wybiera Ruby, ponieważ sprawia, że programowanie jest przyjemniejsze w porównaniu z innymi językami, a także dlatego, że Ruby with Rails umożliwia wykwalifikowanym programistom bardzo szybkie tworzenie aplikacji.
źródło
Przede wszystkim wolniej w stosunku do czego ? DO? Pyton? Zdobądźmy liczby w grze Computer Language Benchmarks :
Zależy od kogo pytasz. Można powiedzieć, że:
Ale z drugiej strony powolny w stosunku do czego? Ruby 1.9 jest mniej więcej tak szybki jak Python i PHP (z 3-krotnym współczynnikiem wydajności) w porównaniu do C (który może być nawet do 300x szybszy), więc powyższe (z wyjątkiem rozważań dotyczących wątków, jeśli twoja aplikacja mocno zależy od tego aspektu ) są w dużej mierze akademickie.
Pisz dla skalowalności i wrzucaj do niego więcej sprzętu (np. Pamięć)
Cóż, REE (w połączeniu z pasażerem ) byłby bardzo dobrym kandydatem.
źródło
Oto, co powiedział twórca Railsów, David Heinemeier Hansson :
tj. rzucanie większej ilości sprzętu lub maszyn w problem jest tańsze niż zatrudnianie większej liczby programistów i używanie szybszego, ale trudniejszego w utrzymaniu języka. W końcu niewiele osób pisze aplikacje internetowe w C.
Ruby 1.9 to znaczna poprawa w stosunku do 1.8. Największe problemy z Ruby 1.8 to jego interpretowana natura (brak kodu bajtowego, brak kompilacji), a wywołania metod, jedna z najczęstszych operacji w Ruby, są szczególnie wolne.
Nie pomaga, że prawie wszystko jest wyszukiwaniem metod w Ruby - dodawanie dwóch liczb, indeksowanie tablicy. Tam, gdzie inne języki ujawniają włamania (
__add__
metoda Pythona , przeciążenie Perla.pm) Ruby robi czyste OO we wszystkich przypadkach, a to może zaszkodzić wydajności, jeśli kompilator / interpreter nie jest wystarczająco sprytny.Gdybym pisał popularną aplikację internetową w Ruby, skupiłbym się na buforowaniu. Buforowanie strony skraca czas przetwarzania tej strony do zera, niezależnie od używanego języka. W przypadku aplikacji internetowych narzut bazy danych i inne operacje we / wy zaczynają mieć znacznie większe znaczenie niż szybkość języka, więc skupiłbym się na ich optymalizacji.
źródło
Pisanie kodu jest wolne. Czytanie kodu jest wolne. Znajdowanie i naprawianie błędów jest powolne. Dodawanie funkcji i ulepszeń jest powolne. Wszystko, co poprawi poprzednie, to wygrana. Bardzo rzadko występowanie stanowi problem.
źródło
Odpowiedź jest prosta: ludzie mówią, że ruby jest wolny, ponieważ jest wolny na podstawie zmierzonych porównań z innymi językami. Pamiętaj jednak, że „wolne” jest względne. Często ruby i inne „wolne” języki są wystarczająco szybkie.
źródło
Joel on Software - Ruby Performance Revisited całkiem dobrze to wyjaśnia. Może to być przestarzałe ...
Polecam trzymać się go, ponieważ przyzwyczaiłeś się do Ruby on Rails,
jeśli kiedykolwiek napotkasz problem z wydajnością, możesz rozważyć użycie innego języka i frameworka.
W takim przypadku naprawdę polecam C # z ASP.NET MVC 2 , działa bardzo dobrze dla aplikacji CRUD.
źródło
Powiedziałbym, że Ruby jest powolna, ponieważ nie włożono wiele wysiłku w przyspieszenie tłumacza. To samo dotyczy Pythona. Smalltalk jest tak samo dynamiczny jak Ruby lub Python, ale działa lepiej o wielkość, patrz http://benchmarksgame.alioth.debian.org . Ponieważ Smalltalk został mniej więcej zastąpiony przez Javę i C # (czyli co najmniej 10 lat temu), nie wykonano już żadnych prac związanych z optymalizacją wydajności, a Smalltalk jest wciąż znacznie szybszy niż Ruby i Python. Pracownicy Xerox Parc i OTI / IBM mieli pieniądze, by zapłacić ludziom, którzy pracują nad przyspieszeniem Smalltalk. Nie rozumiem, dlaczego Google nie wydaje pieniędzy na przyspieszenie Pythona, ponieważ są dużym sklepem Python. Zamiast tego wydają pieniądze na rozwój języków takich jak Go ...
źródło
Przede wszystkim, czy zależy Ci na tym, co inni mówią o języku, który lubisz? Kiedy wykonuje pracę, którą musi wykonać, nic ci nie jest.
OO nie jest najszybszym sposobem na wykonanie kodu, ale pomaga w jego tworzeniu. Inteligentny kod jest zawsze szybszy niż głupi kod i bezużyteczne pętle. Jestem DBA i widzę wiele tych bezużytecznych pętli, upuszczam je, używam lepszego kodu i zapytań, a aplikacja jest szybsza, znacznie szybsza. Czy zależy Ci na ostatniej mikrosekundie? Możesz mieć języki zoptymalizowane pod kątem szybkości, inni po prostu wykonują pracę, którą muszą wykonać i mogą być utrzymywani przez wielu różnych programistów.
To tylko wybór.
źródło
Oczywiście, mówiąc o szybkości, Ruby traci. Mimo że testy porównawcze sugerują, że Ruby nie jest dużo wolniejszy niż PHP. Ale w zamian otrzymujesz łatwy w utrzymaniu kod DRY, najlepszy ze wszystkich frameworków w różnych językach.
W przypadku małego projektu nie odczuwasz żadnej spowolnienia (mam na myśli, aż do mniej niż 50 000 użytkowników), biorąc pod uwagę, że w kodzie nie są stosowane żadne skomplikowane obliczenia, a jedynie główne nurty.
W przypadku większego projektu płacenie za zasoby się opłaca i jest tańsze niż wynagrodzenie programistów. Ponadto pisanie kodu na RoR okazuje się znacznie szybsze niż jakikolwiek inny.
W 2014 r. Ta różnica prędkości, o której mówisz, jest niewielka dla większości witryn.
źródło
Sposób radzenia sobie z wydajnością Ruby w aplikacji internetowej jest taki sam, jak w każdym innym języku programowania:
ARCHITEKTURA
Jest to łatwiejsze w Railsach niż w większości innych frameworków WWW.
Na poziomie aplikacji , buforując wszystko, co ma być buforowane, i zarządzając dostępem do bazy danych w inteligentny sposób (ponieważ wąskie gardło jest zwykle dostępne dla „aplikacji DB” dla większości aplikacji WEB).
Dzięki szynom rozwiązanie tych problemów jest bardzo proste i naturalne. Istnieje kilka abstrakcji do buforowania danych, stron i fragmentów , a także bardzo ładne abstrakty do radzenia sobie z częścią SQL w sposób zoptymalizowany i wielokrotnego użytku ( Active Record i AREL ).
To jest powód, dla którego tak wiele aplikacji napisanych w szybszych i mało wyrazistych językach (takich jak php) kończy się wolniej niż odpowiedniki Rubiego. Rozwiązywanie problemów z buforowaniem i zapytaniami w tych językach nie jest tak łatwe i eleganckie, jak w Ruby.
Na poziomie infrastruktury rozsądne jest myślenie o równoważeniu obciążenia i wszystkich innych rzeczach, o których nie wiem zbyt wiele. Zleciłbym ten problem outsourcingowi, wynajmując platformę jako usługodawca, np. Heroku lub Engine Yard . Tak czy siak. Wdrażanie szyn z równoważeniem obciążenia prawdopodobnie nie jest bardzo trudne.
źródło
Ruby działa wolniej niż C ++ przy wielu łatwo mierzalnych zadaniach (np. Robi kod, który jest silnie zależny od zmiennoprzecinkowego). Nie jest to zaskakujące, ale wystarczające uzasadnienie dla niektórych osób, by powiedzieć, że „Ruby jest wolny” bez kwalifikacji. Nie liczą faktu, że pisanie kodu Ruby jest znacznie łatwiejsze i bezpieczniejsze niż C ++.
Najlepszym rozwiązaniem jest użycie ukierunkowanych modułów napisanych w innym języku (np. C, C ++, Fortran) w kodzie Ruby. Mogą one wykonywać ciężkie podnoszenie, a twoje skrypty mogą koncentrować się na kwestiach związanych z koordynacją na wyższym poziomie.
źródło
Wydajność prawie zawsze polega na dobrym projekcie i zoptymalizowanych interakcjach z bazą danych. Ruby robi to, czego większość stron internetowych potrzebuje dość szybko, zwłaszcza nowsze wersje; a szybkość opracowywania i łatwość konserwacji zapewnia dużą opłacalność kosztów i zapewnia zadowolenie klientów. Uważam, że JAVA ma powolną wydajność wykonywania niektórych zadań, a biorąc pod uwagę trudność programowania w JAVA, wielu programistów tworzy powolne aplikacje niezależnie od teoretycznej wydajności, jak pokazano w testach porównawczych (testy porównawcze są na ogół opracowywane w celu pokazania konkretnej i wąskiej możliwości). Kiedy potrzebuję intensywnego przetwarzania, które nie jest dobrze dostosowane do możliwości mojej bazy danych, wybieram C lub Objective-C lub inny naprawdę skompilowany język do tych zadań w zależności od platformy. Jeśli muszę utworzyć aplikację internetową z bazą danych, Używam RoR lub czasami C # ASP.NET w zależności od innych wymagań; ponieważ wszystkie platformy mają mocne i słabe strony. Szybkość wykonywania czynności wykonywanych przez aplikację jest ważna, ale w końcu liczy się tylko wydajność wykonywania jednego wąskiego aspektu języka; wtedy mógłbym nadal używać języka asemblera do wszystkiego.
źródło
Ludzie mówią, że Ruby działa wolno, ponieważ porównują programy Ruby z programami napisanymi w innych językach. Może programy, które piszesz, nie muszą być szybsze. Może dla programów, które piszesz, Ruby nie jest wąskim gardłem, które spowalnia rzeczy.
Ruby 2.1 w porównaniu do Javascript V8
Ruby 2.1 w porównaniu do zwykłej Lua
Ruby 2.1 w porównaniu do Python 3
źródło
Ruby osiąga dobre wyniki w zakresie produktywności programistów. Ruby z natury wymusza rozwój oparty na testach z powodu braku typów. Ruby działa dobrze, gdy jest używany jako opakowanie wysokiego poziomu dla bibliotek C. Ruby działa również dobrze podczas długotrwałych procesów, gdy jest kompilowany w JIT do kodu maszynowego za pośrednictwem JVM lub Rbx VM. Ruby nie radzi sobie dobrze, gdy wymagane jest rozbicie liczb w krótkim czasie za pomocą czystego kodu ruby.
źródło