Some of posts from this blog has been moved to dywicki.pl. You will be automatically redirected to new blog if you would submit comment.
New posts are published on dywicki.pl, this blog contains old content and it is not continued.

Niektóre posty z tego bloga zostały przeniesione do dywicki.pl. Zostaniesz automatycznie przekierowany jeśli bedzięsz chciał dodać komentarz.
Nowe posty sa publikowane na dywicki.pl, ten blog zawiera stare treści i nie jest kontynuowany.

Propel 1.2 – przyśpiesz go nawet do 2 razy!

Filed under DB,Inne,PHP,Wiadomości by

Jak wiadomo szybkość nie jest domeną Propela. Dzisiejszego popołudnia na oficjalnym kanale Propela odbyłem rozmowę z osobą która twierdziła, że można przyśpieszyć propela o 3 razy (a przymajmniej metodę doSelectJoinAll). Nie zdziwcie się – miała ona rację! :)

Problem w doSelectJoinAll polega na tym, że są wykonywane zbędne iteracje mające na celu sprawdzenie czy element zawiera obiekt dołączanej encji. Można je z powodzeniem zastąpić odpowiednią mapą, która zawiera identyfikatory tych encji, które już są dodane do obiektu. Osoba, która to twierdziła miała odpowiedni kod, który zgadnijcie – zadziałał.
Aby zamiana była uniwersalna – zmieniłem co trzeba w generatorze. Sama metoda działa dwa i pół raza szybciej! Dla zainteresowanych – plik zmieniony przeze mnie – PHP5ComplexPeerBuilder.php. Sprawdź czy Twoje doSelectJoinAll przyśpieszy. :)

Obecnie czasy, które uzyskuje:
0.045847177505493s – nowy build
0.06196403503418s – stary build
Nie mniej wcześniej różnice były znaczne – stary build potrafił zająć do 0.12 s! Wynik prosty – po zmianach (czasy mają znacznie mniejsze wahania) można przyśpieszyć tylko tą jedną metodę o dwa razy. Różnica będzie rosła wraz z ilością kluczy obcych w jednej tabeli. Im ich więcej tym stary build będzie wolniejszy.

3 responses so far

3 Responses to “Propel 1.2 – przyśpiesz go nawet do 2 razy!”

  1. pawel_k says:

    szczerze liczylem na rade jak przyspieszyc calego propela :/

  2. Osoba, która znalazła metodę optymalizacji ma zgłosić odpowiedni ticket. Prawdopodobnie po wprowadzeniu potrzebnych zmian ukaże się wersja 1.2.x bądź 1.3.0.

  3. […] Zachęcony komentarzem do poprzedniego posta postanowiłem zoptymalizować cały builder dla Propela. Zasada działania jest taka sama jak wcześniej – usunięcie zbędnych iteracji. Kod generowany przez moje poprawki nie należy do najszybszych, ale z moich testów wynika jednoznacznie – jest szybszy. Szybki sposób instalacji FasterPHP5ComplexPeerBuilder.php: pobrać plik http://delta.dywicki.pl/propel/FasterPHP5ComplexPeerBuilder.php skopiować do folderu propel/engine/builder/om/php5. w build.properties dla projektu ustawić dyrektywę: PLAIN TEXT CODE: […]

Leave a Reply