Odkrywanie wewnętrznych mechanizmow ob娱乐下载Symfony
Odkrywanie wewnętrznych mechanizmow ob娱乐下载Symfony
Od dłuższego czasu używamy ob娱乐下载Symfony做stworzenia potężnej aplikacji我większośćkodu wykonywanego przez aplikacjępochodzi聂Od nas,啤酒z Symfony。Kilkaset linii kodu kontra tysiące linii kodu。
Lubięrozumieć,木菠萝rzeczy działająodśrodka。Zawsze fascynowały mnie narzędzia, ktore pomagajązrozumieć,木菠萝cośdziała。Pierwsze użycie debuggera滑wykorzystanie阿宝拉兹pierwszy funkcjiptrace
对国防后勤局mnie magiczne wspomnienia。
Chcesz lepiej zrozumieć,木菠萝działa Syob娱乐下载mfony吗?Czas zgłębićmechanizmy, jakich Sob娱乐下载ymfony używa,赎Twoja aplikacja robiła,罗比。Zamiast opisywaćz teoretycznej perspektywy,木菠萝Symob娱乐下载fony radzi sobie zżądaniem HTTP - co byłoby dośćnudne——wykorzystamy narzędzie黑焰,赎uzyskaćpewne wizualne reprezentacje我skorzystaćz nich przedstawienia bardziej zaawansowanych problemow。
Zrozumienie wewnętrznych mechanizmow ob娱乐下载Symfony przy użyciu黑焰
Jużwiesz,że wszystkieżądania HTTP sąobsługiwane przez jeden punkt wejścia: plik公共/ index . php
。啤酒公司dalej吗?木菠萝kontrolery sąwywoływane吗?
Sprofilujmy produkcyjną,angielskąwersjęstrony głownej przy użyciu黑焰poprzez wtyczkę黑焰做przeglądarki:
1
美元ob娱乐下载symfony远程:开放
Albo bezpośrednio w wierszu poleceń:
1
美元黑焰旋度的symfony云:enob娱乐下载v:ob直播app url——管——主/
阿宝przejściu widoku”Ośczasu”w profilu znajdziesz widok podobny poniższego:
Najedźna kolorowe paski na osi czasu,赎uzyskaćwięcej informacji na temat każdego wywołania;poznasz lepiej działanie ob娱乐下载Symfony:
- Głownym punktem wejścia开玩笑
公共/ index . php
; - Metoda
内核:处理()
obsługujeżądanie; - Wywołuje
HttpKernel
,ktory emituje pewne zdarzenia; - Pierwszym zdarzeniem开玩笑
RequestEvent
; - Metoda
ControllerResolver: getController ()
jest wywoływana赎określić,ktory kontroler powinien byćwywoływany国防后勤局przychodzącego adresu URL; - Metoda
ControllerResolver: getArguments ()
jest wywoływana赎określić,ktore argumenty mająbyćprzekazane做kontrolera (wywoływany jest konwerter parametrow); - W następnie wywoływanej metodzie
ConferenceController:指数()
wykonywana jest większośćnaszego kodu; - Metoda
ConferenceRepository: findAll ()
pobiera wszystkie konferencje z bazy danych (zwroćuwagęna połączenie z baządanych咱pośrednictwemPDO: __construct ()
); - Metoda
树枝\环境::渲染()
renderuje szablon; - Zdarzenia
ResponseEvent
orazFinishRequestEvent
sąwywoływane,啤酒wygląda nażeżaden nasłuchiwacz zdarzeń(ang。事件监听器)聂jest zarejestrowany ponieważzdarzenia wykonująsięnaprawdęszybko。
Ośczasu,świetny sposob na zrozumienie,木菠萝działa kod;jest bardzo przydatne, kiedy otrzymujesz projekt rozwijany przez kogośinnego。
Teraz sprofiluj tęsamąstronęz maszyny lokalnej wśrodowisku deweloperskim:
1
美元黑焰旋度的symfony varob娱乐下载:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL没有/
Otworz资料。Powinno nastąpićprzekierowanie做widoku grafu połączeń,ponieważżądanie było naprawdęszybkie, ośczasu będzie prawie pusta:
Rozumiesz, siędzieje吗?Pamięćpodręczna HTTP (ang。HTTP缓存)开玩笑włączona我przez profilujemy warstwępamięci podręcznej Symfony。ob娱乐下载Ponieważstrona znajduje sięw pamięci podręcznej,HttpCache \商店:restoreResponse ()
otrzymuje odpowiedźHTTP z pamięci podręcznej我kontroler nigdy聂jest wywoływany。
Wyłącz warstwępamięci podręcznej w公共/ index . php
tak木菠萝w poprzednim etapie我sprobuj ponownie。《profil Od新法提案widać,że wygląda zupełnie inaczej:
Głowne rożnice sąnastępujące:
- Zdarzenie
TerminateEvent
nie, ktore było widoczne wśrodowisku produkcyjnym, zajmuje duży procent czasu wykonania;możemy dostrzec,że jest zdarzenie odpowiedzialne咱przechowywanie danych profilera Symfonyob娱乐下载 zebranych podczasżądania; - W wywołaniu
ConferenceController:指数()
,zwroćuwagęnaSubRequestHandler:处理()
、metodęktora renderuje ESI (dlatego mamy dwa wywołania分析器:saveProfile ()
,jedno国防后勤局głownegożądania我jedno国防后勤局应急服务国际公司)。
Przejdźosi czasu,赎dowiedziećsięwięcej;przejdź做widoku grafu połączeń,赎zobaczyćrożne reprezentacje tych samych danych。
木菠萝właśnie odkryliśmy, kod wykonywany wśrodowisku deweloperskim我produkcyjnym jest zupełnie inny。Środowisko programistyczne jest wolniejsze, ponieważ分析器Symfonyob娱乐下载 probuje zebraćwiele danych,赎ułatwićdebugowanie。Dlatego teżnależy zawsze stosowaćprofilowanie wśrodowisku produkcyjnym, nawet lokalnie。
W ramach ciekawych eksperymentow: sprofiluj stronębłędu, stronę/
(ktora jest przekierowaniem)滑zasob API。Każdy资料powie Ci trochęwięcej o tym木菠萝działa Symfony,里面ob娱乐下载klasy / metody sąwywoływane,马公司większy koszt wykonania co niższy。
Używanie dodatku黑焰调试
Domyślnie黑焰usuwa wszystkie wywołania metod, ktore聂sąwystarczająco znaczące,赎uniknąćładowania zbyt dużej ilości danych我pokazywania dużych wykresow。W przypadku używania黑焰jako narzędzia debugowania, lepiej jest zachowaćwszystkie wywołania używając dodatku调试。
W wierszu poleceń,użyj flagi——调试
:
1 2
美元黑焰,调试旋度的symfony var:ob娱乐下载出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL没有/美元黑焰,调试卷symfony云:env: url—ob娱乐下载—管——主/ob直播app
Wśrodowisku produkcyjnym, zobaczysz na przykładładowanie pliku o nazwie.env.local.php
:
Skąd, sięwzięło吗?平台。sh wykonuje pewne optymalizacje podczas wdrażania aplikacji ob娱乐下载Symfony, np。optymalizując自动装卸机作曲家(——optimize-autoloader apcu-autoloader——classmap-authoritative
)oraz zmienneśrodowiskowe zdefiniowane w pliku.env
(赎uniknąćprzetwarzania pliku国防后勤局każdegożądania) poprzez wygenerowanie pliku.env.local.php
:
1
美元ob娱乐下载symfony运行作曲家dump-env刺激
黑焰jest bardzo potężnym narzędziem, ktore pomaga zrozumieć,w jaki sposob kod jest wykonywany przez PHP。Poprawa wydajności jest tylko jednym泽sposobow wykorzystania profilera。
Używanie debuggera krokowego z Xdebug
Osie czasu我grafy wywołańw黑焰pozwalająpokazać,ktory plik / funkcja metoda jest wykonywana przez PHP解释器,celem większego zrozumienia koduźrodłowego projektu。
Kolejnym sposobem na podążanie咱wykonywanym kodem笑话调试器krokowy,木菠萝np。Xdebug。调试器krokowy pozwala na interaktywny间隔阿宝kodzie PHP,żeby zweryfikowaćprzepływ kodu oraz sprawdzićstruktury danych。我开玩笑,bardzo przydatne podczas debugowania niespodziewanych zachowańzastępuje popularnątechnikę“var_dump() /退出()”。
Na początek, zainstaluj rozszerzenie PHPxdebug
。Sprawdźczy jest zainstalowane咱pomocąponiższej komendy:
1
美元ob娱乐下载symfony php - v
W odpowiedzi znajdziesz informacje o Xdebug:
1 2 3 4 5 6
PHP 8.0.1 (cli)(建:2021年1月13日08:22:35)(nt)版权(c) PHP Zend引擎v4.0.1,版权(c) Zend技术和Zend OPcache v8.0.1,版权(c),通过与Xdebug v3.0.2 Zend Technologies,版权(c) 2002 - 2021,通过与黑焰戴瑞克Rethans v1.49.0 ~ linux-x64-non_zts80, https://blackfire。io,黑焰
Możesz także sprawdzić,czy Xdebug jest zainstalowany国防后勤局PHP-FPM, poprzez przejście przeglądarki我kliknięcie w链接”视图phpinfo (),ktory pojawi się阿宝najechaniu na标志Symfonyob娱乐下载 w pasku debugowania:
Teraz, włącz tryb调试
w Xdebug:
Domyślnie, Xdebug wysyła戴恩portu 9003 twojego lokalnego玉簪属草本植物。
Wyzwalanie Xdebug może zostaćzrealizowane na wiele sposobow, jednak najłatwiejsze będzie korzystanie z Xdebug z twojego IDE。W tym rozdziale użyjemy Visual Studio代码做zademonstrowania木菠萝działa。ZainstalujPHP调试rozszerzenie poprzez uruchomienie funkcji“快速开放”(Ctrl + P
),następnie wklej poniższąkomendę我wciśnij输入:
1
ext安装felixfbecker.php-debug
Utworz następujący plik konfiguracyjny:
Visual Studio代码Będąc w w twoim katalogu projektu, przejdźdebuggera我kliknij na zielony przycisk z napisem Xdebug“听”:
Jeśli przejdziesz przeglądarki我odświeżysz stronę,IDE automatycznie sięotworzy, sygnalizując,że sesja debugowania jest gotowa。Domyślnie, wszystko jest punktem przerwania (ang。断点),więc wykonywanie kodu zatrzyma sięna pierwszej instrukcji。Od tej pory, w jaki sposob przeglądasz kod——poprzez analizęzmiennych, przechodzenie przez kolejne linijki kodu, czy wchodzenie我analizowanie kodu konkretnych funkcji, zależy wyłącznie Od Ciebie。
Podczas debugowania, możesz odznaczyćpunkt przerwania“一切”我samemu dokładnie ustawićte punkty w twoim kodzie。
Jeśli debuggery krokowe są国防后勤局ciebie nowościąprzeczytaj十świetny poradnik国防后勤局Visual Studio代码,ktory wszystko wizualnie wyjaśnia。