2013-03-09 20 views
7

pracuję na nie tak dużego projektu (3 zestawy stworzyłem i 6 Pobrałem/5 podmiotów) i umieściłem ten kod na moim kontroler domowego:Symfony2 czas ładowania i wydajność

class HomeController extends Controller 
{ 
    public function indexAction() 
    { 
     $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; 
     echo $time; 
     die(); 

     //... 

To daje ja pod 100ms na localhost (z włączonym APC), co jest w porządku.

Prawdziwym problemem jest zachowanie na serwerze internetowym (za pomocą prod env i APC nie jest zainstalowany): Jeśli nie korzystać z witryny za jakieś 10 minut, po raz pierwszy, jest to naprawdę wolno ładować (2 do 4 sekund), a następnie, jeśli pozostanę na stronie internetowej, jeśli odświeżam stronę, jest znacznie szybszy (od 500ms do 1s).

Czy to normalne? Czy coś jest nie tak z moim serwerem online lub projektem symfony2?

+3

Prawdopodobnie długie ujęcie, ale czy masz włączoną obsługę Xdebug? Ma ogromny wpływ na wydajność. – gilden

+0

Ja nie. Ale zanim spróbuję czegoś takiego, chciałbym wiedzieć, czy te wartości są normalne czy nie? – httpete

+2

Z pewnością nie są one normalne, jeśli korzystasz z przyzwoitego sprzętu i środowisko jest prod. – gilden

Odpowiedz

2

Powinieneś zdecydowanie skonfigurować APC, aby zmniejszyć czas ładowania. Oto notatka na ten temat:

Performance

(2015 edit: link aktualizacja)

+0

Ponieważ jest dość duża różnica między wersją lokalną a wersją online, nie sądzisz, że pochodzi ona z mojej konfiguracji symfony2, połączenia z bazą danych ... a nie z PHP? – httpete

+0

Zależy od wersji PHP, której używasz na lokalnym/zdalnym env, a także na systemie operacyjnym. – apoq

+0

Próbowałem uruchomić projekt na moim komputerze MAC z włączonymi MAMP i APC (próbowałem także xCache) ... i otrzymuję ~ 30ms zamiast ~ 300ms! Jest to zaskakująco szybsze, dzięki! Ale ... ponieważ nie mogę włączyć funkcji APC na moim serwerze online, wciąż szukam sposobów, by to poprawić. – httpete

2

Wystarczy spojrzeć na karcie osi czasu wielkiego paska narzędzi/profiler który Symfony dostarcza: http://symfony.com/blog/new-in-symfony-2-2-new-stopwatch-component (nie ograniczonej do 2.2)

Czy używasz localhost jako database_host? Jeśli tak, spróbuj zamiast niego 127.0.0.1!

Czy uzyskujesz dostęp do zewnętrznego API takiego jak Facebook (FOSUserBundle)?

+0

Używam Symfony v2.0.9, więc jestem w stanie zainstalować komponent? Używam 127.0.0.1 i FOSUserBundle. – httpete

+0

Pasek narzędzi jest zdecydowanie dostępny w wersji 2.0.9: https://github.com/symfony/symfony-standard/blob/v2.0.9/app/config/config_dev.yml # L9 A może zaktualizujesz swoją wersję Symfony? Czy zrobiłeś jakiś postęp w czasie renderowania? – hacfi

+0

Zainstalowałem komponent Stoper za pomocą kompozytora, ale nie ma nic nowego w moim profilerze sieciowym ... Jeśli kiedykolwiek sprawię, że będzie działać, czy będzie w stanie podać informacje przed wykonaniem pierwszego kontrolera? (por. moje pytanie kodowe) – httpete

Powiązane problemy