Zarządzanie wydajnością
Zarządzanie wydajnością
Przedwczesna optymalizacja jestźrodłem wszelkiego zła。
十cytat może jużbyćCi znany啤酒lubięw całości:
Powinniśmy zapomniećo małych usprawnieniach powiedzmy w około 97% przypadkow: przedwczesna optymalizacja jestźrodłem wszelkiego zła。聂powinniśmy jednak rezygnowaćz możliwości zwiększenia wydajności w tych krytycznych trzech procentach。
—Donald Knuth
Nawet niewielka poprawa wydajności może miećznaczenie zwłaszcza w przypadku sklepow internetowych。Teraz, gdy aplikacja księgi gości jest gotowa, zobaczmy,木菠萝możemy sprawdzićjej wydajność。
Najlepszym sposobem na znalezienie optymalizacji wydajności jest użycieprofilera。Najbardziej popularnąobecnie opcją笑话黑焰(Ważna informacja:jestem rownieżzałożycielem projektu黑焰)。
Przedstawienie黑焰
黑焰składa sięz kilku części:
- Klient,ktory uruchamia profilowanie (narzędzie黑焰CLI滑rozszerzenie przeglądarki国防后勤局Google Chrome滑Firefox);
- 代理我,ktory przygotowuje zbiera戴恩przed wysłaniem我做serwisu黑焰。io w celu我wyświetlenia;
- Rozszerzenie PHP (sonda),ktore analizuje wykonanie kodu PHP。
偿pracowaćz黑焰,najpierw musiszsięzarejestrować。
Zainstaluj黑焰na swoim komputerze, uruchamiając następujący skrypt instalacyjny:
1
美元curl https://installer.blackfire.io/installer。上海| bash
Instalator pobiera我instaluje narzędzie黑焰CLI。
阿宝zakończeniu, zainstaluj sondę国防后勤局wszystkich dostępnych wersji PHP:
1
美元sudo黑焰php:安装
Włącz teżsondęPHP国防后勤局naszego projektu:
1 2 3 4 5 6 7 8 9 10
- - - a / php . ini+ + + b / php . ini@@ 7 3 + 7 7 @@会话。use_strict_mode = realpath_cache_ttl = 3600 zend.detect_unicode =关闭xdebug.file_link_format = vscode: / /文件/ % f: % l++(黑焰)+ # php_blackfire使用。dll在Windows上+扩展= blackfire.so
Uruchom ponownie serwer WWW,赎PHP mogłzaładować黑焰:
1 2
美元ob娱乐下载symfony服务器:停止美元ob娱乐下载symfony服务器:开始- d
偿powiązać概要z Twoim kontem, narzędzie黑焰CLI阿宝zainstalowaniu musi byćskonfigurowane Twoimi danymi uwierzytelniającymi, ktore znajdziesz na gorzestrony设置/凭证。作品喻示Wykonaj następujące polecenie podmieniając zastępcze:
1
美元黑焰客户:配置——客户机id = xxx client-token = xxx
Instalowanie agenta黑焰na Dockerze
Usługa agenta黑焰została jużskonfigurowana w stosie码头工人组成:
偿komunikowaćsięz serwerem musisz uzyskaćswoje戴恩uwierzytelniające做serwera(te戴恩wskazujągdzie chcesz przechowywać概要——możesz utworzyćjeden na projekt);można我znaleźćna多尔strony设置/凭证。Przechowuj我pośrod poufnych danych:
1 2 3 4
美元ob娱乐下载symfony控制台的秘密:集BLACKFIRE_SERVER_ID# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx美元ob娱乐下载symfony控制台的秘密:集BLACKFIRE_SERVER_TOKEN# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Możesz jużuruchomićnowy kontener:
1 2
美元docker-compose停止美元docker-compose了-
Naprawianie niedziałającej instalacji黑焰
Jeśli podczas profilowania pojawi siębłąd, zwiększ poziom logowania黑焰,赎uzyskaćwięcej informacji w logach:
1 2 3 4 5 6 7
- - - a / php . ini+ + + b / php . ini@@ -10 3 + 10 4 @@ zend.detect_unicode =[黑焰]# php_blackfire使用。= blackfire.so dll Windows上的扩展+ blackfire.log_level = 4
Uruchom ponownie serwer WWW:
1 2
美元ob娱乐下载symfony服务器:停止美元ob娱乐下载symfony服务器:开始- d
一个następnieśledź罗技:
1
美元ob娱乐下载symfony服务器:日志
Wykonaj profilowanie ponownie我sprawdźwyjście logow。
Konfigurowanie黑焰wśrodowisku produkcyjnym
黑焰jest domyślnie włączony国防后勤局wszystkich projektow Platform.sh。
Ustaw戴恩uwierzytelniająceserwerajako poufne戴恩produkcyjne:
1 2 3 4
美元ob娱乐下载symfony控制台的秘密:集BLACKFIRE_SERVER_ID - env =刺激# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx美元ob娱乐下载symfony控制台的秘密:集BLACKFIRE_SERVER_TOKEN - env =刺激# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sonda PHP jest jużwłączona,木菠萝każde inne potrzebne rozszerzenie PHP:
Konfigurowanie serwera清漆国防后勤局黑焰
Zanim będziesz w stanie wykonaćwdrożenie potrzebne做rozpoczęcia profilowania, potrzebujesz sposobu na ominięcie pamięci podręcznej清漆HTTP。W innym przypadku,黑焰nigdy聂odpyta aplikacji PHP。Będziesz autoryzowaćtylko prośby o profilowanie pochodzące z twojej lokalnej maszyny。
Znajdźswoj bieżący IP:这
1
美元curl https://ifconfig.me/
我użyj去,赎skonfigurować清漆:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31
- - - / .platform / config.vcl+ + + b / .platform / config.vcl11 @@ @@ 1、3 + 1+ acl配置文件{+ #授权当地的IP地址(取代IP发现上面)+“192.168.0.1”;+ #授权黑焰服务器+“46.51.168.2”;+“54.75.240.245”;+}+将调用vcl_recv{接头设置要求。backend_hint = application.backend ();设置req.http。Surrogate-Capability =“abc = ESI / 1.0”;@@ 8 6 + 16 16 @@将调用vcl_recv{}返回子(清洗);}++ #不要概要ESI请求+如果(req.esi_level > 0) {+未凝结req.http.X-Blackfire-Query;+}++ #旁路清漆当这个概要文件请求来自一个已知的IP+如果(req.http。X-Blackfire-Query & &客户端。ip ~) {+返回(通过);+}子vcl_backend_response} {
Teraz możesz wdrożyć。
Profilowanie stron internetowych
Możesz profilowaćtradycyjne strony internetowe używając Firefoksa滑Google Chrome poprzez我dedykowane rozszerzenia。
Na lokalnym komputerze, podczas profilowania,聂zapomnij wyłączyćpamięci podręcznej HTTP w配置/包/ framework.yaml
:jeśli迪高聂zrobisz, będziesz profilowaćwarstwępamięci podręcznej HTTP Symfony zaob娱乐下载miast własnego kodu。
偿uzyskaćlepszy obraz wydajności Twojej aplikacji wśrodowisku produkcyjnym, należy我rownieżprofilować。Domyślnie, twoje lokalneśrodowisko korzysta泽środowiska deweloperskiego, ktore dodaje znaczny narzut (głownie w celu zebrania danych国防后勤局paska narzędzi做debugowania sieci我profilera Symfony)。ob娱乐下载
请注意
Ponieważbędziemy profilowaćśrodowisko produkcyjne,聂马nic zmiany w konfiguracji Ponieważw poprzednim rozdziale włączyliśmy warstwępamięci podręcznej HTTP Symfony tylko国ob娱乐下载防后勤局środowiska produkcyjnego。
Przełączenie maszyny lokalnej做środowiska produkcyjnego można wykonaćpoprzez zmianęzmiennejśrodowiskowejAPP_ENV
w pliku.env.local
:
1
APP_ENV =刺激
Albo możesz użyćpolecenia服务器:刺激
:
1
美元ob娱乐下载symfony服务器:刺激
聂zapomnij przełączyć去z powrotem naśrodowisko deweloperskie阿宝zakończeniu sesji profilowania:
1
美元ob娱乐下载symfony服务器:刺激——
Profilowanie zasobow API
Profilowanie API滑SPA jest wygodniejsze z poziomu linii komend,咱pomocązainstalowanego wcześniej narzędzia黑焰CLI:
1
美元黑焰旋度的symfony varob娱乐下载:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL被
Polecenie黑焰旋度
akceptuje dokładnie takie argumenty我opcje木菠萝旋度。
Porownanie wydajności
W etapie poświęconym pamięci podręcznej dodaliśmy warstwępamięci podręcznej,赎poprawićwydajnośćnaszego kodu,啤酒聂sprawdziliśmy ani聂zmierzyliśmy wpływu zmiany na wydajność。Ponieważźle南idzie zgadywanie, będzie szybkie, co powolne, możesz znaleźćsięw sytuacji, w ktorej niektore usprawnienia spowalniajądziałanie Twojej aplikacji。
咱każdym razem należy zmierzyćwpływ wszelkich optymalizacji, ktore robisz咱pomocąprofilera。黑焰ułatwia wizualne我porownanie dziękinarzędziu porownywania。
Tworzenie czarnoskrzynkowych testow funkcjonalnych (ang。黑盒)
Dowiedzieliśmy sięjuż,木菠萝pisać暴躁的funkcjonalne z Symfonyob娱乐下载。黑焰może byćużywany做pisania scenariuszy przeglądania, ktore mogąbyćuruchamiane nażądanie przezodtwarzacz黑焰。Napiszmy scenariusz, ktory przesyła nowy komentarz我zatwierdza poprzez链接e-mailowy wśrodowisku deweloperskim oraz przez konto administracyjne wśrodowisku produkcyjnym。
Utworz plik.blackfire.yaml
o następującej zawartości:
Pobierz odtwarzacz黑焰,赎商务部uruchomićscenariusz lokalnie:
1 2 3
美元curl https://get.blackfire.io/blackfire-player.phar -OLsS美元chmod + x blackfire-player.phar美元cp /home/fabien/Code/github/blackfireio / blackfire.io /播放器/ blackfire-player。phar blackfire-player.phar
Uruchomienie迪高scenariusza wśrodowisku deweloperskim:
1
美元/ blackfire-player。phar运行——端点= ' symfonyob娱乐下载 var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL .blackfire。yaml——变量“webmail_url =ob娱乐下载 symfony var:出口MAILER_WEB_URL 2 > / dev / null '”——变量=“env = dev”vv
1
美元rm blackfire-player.phar
Albo wśrodowisku produkcyjnym:
1
美元/ blackfire-player。phar运行——端点= ' symfonyob娱乐下载云:ob直播appenv: url——管——主要的.blackfire。yaml——变量“webmail_url =没有”——变量=“env =刺激”vv
Scenariusze黑焰mogąrownieżwyzwalaćprofilowanie国防后勤局każdegożądania我uruchamiać暴躁的wydajności poprzez dodanie flagi——黑焰
。
Automatyzowanie kontroli wydajności
Zarządzanie wydajnościąpolega聂tylko na poprawie wydajności istniejącego kodu,啤酒rownieżna sprawdzeniu, czy dotychczasowe działania wydajności聂zmniejszyły。
Scenariusz napisany w poprzedniej sekcji może byćuruchamiany automatycznie w trybie ciągłej integracji (ang。持续集成)滑wśrodowisku produkcyjnym w regularnych odstępach。
平台。sh pozwala rownieżnauruchamianie scenariuszy,gdy tworzysz nowągałąź滑wdrażasz wśrodowisku produkcyjnym,赎automatycznie sprawdzićwydajnośćnowego kodu。