Dlaczego Railsy 3 dzialaja tak wolno?

Przerobilem jedna ze swoich aplikacji z Railsow 2.3.5 do 3.0 i mam fatalne wrazenia dot. szybkosci dzialania. Po pierwsze nakladka ftp na paperclipa (paperclipftp) nie zostala chyba jeszcze dostosowana do Railsow 3, uzywajac jej czasy ladowania niektorych view rosna 10-krotnie (typu 300ms vs 3 sec), no ale mniejsza o to… Najgorsze jest to, ze identyczna aplikacja, z identycznym controlerami, modelami i widokami generuje widoki 3-4x wolniej. Benchmark ActiveRecordu tez daje mi wyzsze czasy (aczkolwiek tu roznica nie jest az taka duza, jakies 20-30%). Testowalem szybkosc generowania widokow zarowno u siebie na WEBricku jak i na serwerze Heroku i roznice sa na tyle duze, ze nawet przegladajac po prostu strone w wersji R3 czuc, ze dziala bardzo wolno w porownaniu z 2.3.5. Jedyna roznica miedzy tymi wersjami jest taka, ze w 2.3.5 wiekszosc dodatkow zainstalowalem jako pluginy, a w wersji 3 zgodnie z duchem czasu korzystam prawie tylko z gemow. Czy tylko ja mam taki problem? Chcialem przejsc do wersji 3ciej i wykorzystywac jej dobrodziejstwa, ale taki spadek wydajnosci jest po prostu nie do przyjecia.

Jezeli chodzi o dodatki to korzystam z:
gemy: rails, jquery-rails, mysql/pg, paperclip, paperclipftp, recaptcha, twitter-oauth, will_paginate
pluginy: acts_as_taggable_on_steroids, searchlogic

Dodam, ze testowalem te czasy zarowno uzywajac Rubiego w wersji 1.8.7, jak i 1.9.2 - wynik identyczny.

Searchlogic Ci działa z Rails 3?

http://github.com/railsdog/searchlogic - ten tak

Przypuszczam, że używasz postgresa, bo piszesz że testowałeś aplikację na heroku.
W railsach 3 jest bug który powoduje że dla każdego zapytania sql są wyciągane informacje o tabelach.
W mysql-u bug ten nie występuje, tylko w postgresie.
W ostatnich commitach jest to już naprawione i pewnie będzie wydane w wersji 3.0.2.

Więcej info można znaleźć tutaj:
https://rails.lighthouseapp.com/projects/8994/tickets/5392-column_definitions-method-being-called-before-and-after-every-single-sql-statement-on-postgresql

Czekamy też na Arela2

Porownalem dzialanie strony przy uzyciu Postgresa i MySQL’a i rzeczywiscie na tym drugim jest sporo szybciej, a przede wszystkim nie ma takich kwiatkow, ze strona laduje sie 3-4 sekundy :slight_smile: Niestety, czasy wciaz sa srednio 3 razy dluzsze niz przy identycznej konfiguracji w Railsach 2.3.5. Troche mnie to mierzi, bo wlasnie mam zaczac nowy, dosc duzy projekt i chcialem go budowac w Railsach 3, ale teraz jestem bardzo sceptyczny… Zastanawiam sie jak mogli wypuscic takiego babola, ktory nie radzi sobie z obsluga jednej z dwoch najpopularniejszych opensource’owych baz danych. W ogole rozwijanie Railsow w taka strone, ze wraz z kolejna wersja multum rzeczy przestaje byc kompatybilne (jak sami widzicie, malo pluginow z 2jki dziala w 3jce bez przerobek) i trzeba sie jej uczyc niejako od nowa powoduje moja frustracje i chec do nauki PHP :slight_smile: Choc inni z kolei przestrzegaja mnie przed nim, ale mysle, ze w PHP mialbym przynajmniej wiecej realnej kontroli nad tym, co dzieje sie ze strona.

Arel używany do generowania zapytań w nowym activerecordzie został przepisany, więcej informacji tutaj: http://engineering.attinteractive.com/2010/10/arel-two-point-ohhhhh-yaaaaaa/

Na Twoim miejscu użyłbym gałęzi 3-0-stable, dodaj w Gemfile:

gem "rails", :git => "http://github.com/rails/rails.git", :branch => "3-0-stable"

Daj znać czy to coś zmienia, sam jestem ciekawy jaka będzie różnica.

Wydajność w 3.0 jest gorsza dla wszystkich baz danych ze względu na długi czas generowania zapytań (więcej dowiesz się czytając powyższego posta). A jak można było wypuścić takiego babola? Nie dla każdej aplikacji czasy były takie wysokie. Przy poście ogłaszającym release była informacja, że są pewne problemy z wydajnością, ale było wtedy już całkiem sporo aplikacji działających wcześniej z wersją z gita, które chodziły wystarczająco szybko.

Wybór jest prosty. Możesz wybrać framework, który będzie mega stabilny, albo taki który będzie się dynamicznie rozwijał. Nie można tych 2 rzeczy pogodzić. Myślę, że brak kompatybilności wstecz w takiej postaci w jakiej to widzimy w railsach 3, to bardzo mała cena za niesamowite uproszczenie kodu i nowe feature’y.

Pewnie nie patrzysz na to w ten sposób, ale pomyśl sobie o ile prościej teraz jest implementować nowe rzeczy w railsach.

Co do pluginów, to większść z nich już dawno została przeportowana, więc nie wiem dlaczego masz z tym problem :wink:

Od nowa? :slight_smile:

Wymień mi te kolosalne zmiany w API, które wymuszają na Tobie naukę od nowa, wtedy możemy porozmawiać.

A to ciekawe, jakiej kontroli Ci brakuje w railsach? Chętnie podyskutuję na ten temat, bo wydawało mi się, że w Railsach mam całkiem niezła kontrolę nad wszystkim co jest potrzebne do szczęścia przy tworzeniu aplikacji internetowych (tym bardziej jeżeli chodzi o railsy 3, gdzie dużo łatwiej jest rozszerzyć możliwości frameworka i banalnie jest zbudować swoje własne typy kontrolerów, np. lżejszą wersję jeżeli nie potrzebujesz wszystkich modułów includowanych w ActionController::Base)

A już się bałem że październik przeleci bez żadnego flejma :slight_smile:

Przepraszam, nie chcialem wzbudzac zbednych emocji :wink:

Najwidoczniej musze poczytac wiecej o Railsach, a nie pchac sie w inne technologie. Jestem troche debilem w tym temacie i generalnie wole wiecej dzialac, a mniej czytac… i potem mam takie problemy. W kazdym razie dzieki za odpowiedzi chlopaki. A ta wersje 3-0 stable sprawdze, ale po weekendzie… Odpoczywac tez trzeba :wink:

sNiCKY: Dzisiaj wyszła wersja railsów 3.0.3, w której jest już dostępny Arel 2.0. Jak będziesz miał czas to napisz kilka słów o tym, czy zmieniła się wydajność, ciekawi mnie to, a nie mam w tej chwili żadnej aplikacji, na której mógłbym to dobrze sprawdzić.

Tej starej strony, o ktorej pisalem w tym temacie postanowilem w koncu nie przenosic do Railsow 3… Nie chcialem psuc czegos, co dobrze dziala :slight_smile: Ale zaczynam teraz tworzyc nowa aplikacje w R3, na tym samym systemie i ja takze bede wrzucal na Heroku, wiec w najblizszym czasie postaram sie zrobic male testy i przekazac ich wyniki.

ktoś postawił już coś wiekszego na Railsach 3 ? Zastanawiam się czy nowy projekt na tym postawić, czy jednak bezpieczniej będzie na najnowszej 2ce ? Jakie natrafiliście problemy poza niekompatybilnością gemów ?

Niedługo wychodzi Rails 3.1, a jeszcze ktoś się zastanawia czy już używać railsów 3.0.x? :wink:

Ja natrfiłem na różne błędy. Większość albo dość szybko poprawiona po zgłoszeniu, albo mało istotna albo drogus mi wyjaśnił co robię źle :slight_smile:
https://rails.lighthouseapp.com/tickets?q=reported_by:"Robert+Pankowecki"

Ciekawie jakie zmiany przyniesie Rails 3.1 i kiedy jest planowane wydanie wersji stabilnej :]

Planowane jest na gwiazdkę, ale raczej się trochę przedłuży (z tego co wiem assets pipelining jeszcze jest w powijakach, a to jedna z większych zmian).

Z nowych rzeczy:

  • mountable applications oczywiście :wink: (a dokładniej tworzenie montowalnych aplikacji używając rails engines)
  • assets pipelining - zamiast do katalogu public pliki statyczne będzie można wrzucać do app/assets, co pozwoli na wiele różnych ciekawych zabiegów (przykłady tego co jest możliwe można zobaczyć na podstawie gema compass)
  • razem z punktem powyższym, mocno ułatwione zarządzanie cache’em http (domyślnie będzie użyty rack-cache, ale idea jest taka, żeby banalnie łatwo było to zmienić na dowolne inne narzędzie jak akamai czy varnish)
  • identity map dla active recorda
  • flushing (tylko najprawdopodobniej będzie to implementacja, która nie musi do końca działać z wszystkimi gemami, więc może być trochę eksperymentalnie)
  • zajebisty tweak do migracji: https://github.com/rails/rails/commit/a4d9b1d329ef897f6b23216b01cb510db35a37b5
  • dużo małych usprawnień (wystarczy spojrzeć na ilość commitów od wersji stable, w tym momencie prawie 2000, a do wersji 3.1 jeszcze trochę pracy zostało: https://github.com/rails/rails/compare/3-0-stable...master)

Jednym słowem jest na co czekać :slight_smile:

A można wiedzieć na kiedy zaplanowane jest dodanie interfejsu admina?

Co prawda Rails Vim plugin robił to dla mnie od dawna (w sposób statyczny rzecz jasna), ale może się przydać. Kolejna rzecz, której nie muszę tłumaczyć studentom “bo robi się sama” :slight_smile:

BTW Piotrek nieźle, nieźle (może to suchar, ale…) - Yehuda Cię chwali.
Gratuluję :slight_smile:

A można wiedzieć na kiedy zaplanowane jest dodanie interfejsu admina?[/quote]
Panel admina już jest, rozwijał go Bogdan Gaza w ramach rubysoc, ja tylko lekko pomagałem: http://github.com/sferik/rails_admin

Nie mam pojęcia w jakim stadium rozwoju jest teraz, będę musiał sprawdzić w wolnej chwili.

[quote=apohllo]BTW Piotrek nieźle, nieźle (może to suchar, ale…) - Yehuda Cię chwali.
Gratuluję :)[/quote]
Suchar nie suchar, dzięki! :smiley: