Prestaties beheren

Prestaties beheren

Vroegtijdige optimalaties zijn de wortel van het kwaad。

我爱你,我爱你。Maar ik citeer het graag volledig:

我们moeten kleine efficiëntieverbeteringen vergeten, zeg maar 97% van de tijd: voortijdige optimalisatie是de wortel van alle kwaad。Toch mogen we onze kansen in die kritische 3 procent niet voorbij laten gaan。

——唐纳德·克努特

Zelfs kleine prestatieverbeteringen kunnen een verschil maken, vooral voor电子商务网站。Nu de gastenboekapplicatie klaar是voor黄金时间,laten we eens kijken hoe we de prestaties ervan kunnen controleren。

最好的大厦是最理想的大门分析器.De meest populaire optie是tegenwoordig黑焰volledige免责声明: ik ben ook de oprichter van het Blackfire项目)。

介绍货车黑火

黑火:

  • 即使客户端die profielen activeert (de Blackfire CLI-tool of een browserextensie voor谷歌Chrome of Firefox);
  • 即使代理黑火之死。IO worden手势voor weergave;
  • 甚至PHP-extensie (de探针) php代码工具。

我遇到了黑火在werken, moet je eereen解释这个词

安装程序Blackfire op jouw lokale机门het volgende installatiescript uit te voeren:

1
Curl https://installer.blackfire.io/installer.sh | bash

点击installatieprogramma downloadt en installeert de Blackfire CLI Tool。

在所有定制的PHP版本中安装het de PHP probe:

1
Sudo blackfire php:安装

Activeer de PHP-probe voor ons项目:

1 2 3 4 5 6 7 8 9 10
——/ php . ini+ + + b / php . ini@@ -7,3 +7,7 @@会话use_strict_mode=On realpath_cache_ttl=3600 zend.detect_unicode=Off xdebug.file_link_format=vscode://file/%f:%l . use_strict_mode=On realpath_cache_ttl=3600 zend.detect_unicode=Off++(黑焰)在Windows上使用php_blackfire.dll+扩展= blackfire.so

Herstart de webserver zodat PHP Blackfire kan laden:

1 2
ob娱乐下载symfony服务器:停止ob娱乐下载Symfony服务器:start -d

De Blackfire CLI Tool moet worden gconfigureerd meet jouw person like账户Gegevens (om je projectprofielen op te slan on je personal like account)。Je kan deze bovenaan de设置/凭证paginavinden。Voer het volgende commando om de platatsvervangers in te vullen:

1
Blackfire客户端:config——client-id=xxx——client-token=xxx

黑火特工,多克

De Blackfire代理服务是芦苇geconfigureerd在De Docker撰写堆栈:

docker-compose.override.yml
1 2 3 4 5 6 7 8 9
blackfireio/blackfire- symfob娱乐下载y -meta ###黑焰:图片:黑焰/黑焰:2# uncomment将Blackfire凭据存储在本地的.env中。本地文件# env_file: .env.local环境:BLACKFIRE_LOG_LEVEL:4港口:[8307]###< blackfireio/blackfire-ob娱乐下载 symfy -meta ###

我遇见的人不是我的朋友,而是我的朋友服务器Gegevens opvragen (deze Gegevens geeven aan waar je de profielen wilt opslaan—je kan er per project één aanmaken);Deze kan je onderaan de设置/凭证paginavinden。Bewaar ze als geheimen:

1 2 3 4
ob娱乐下载Symfony控制台的秘密:BLACKFIRE_SERVER_ID# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxob娱乐下载Symfony控制台的秘密:BLACKFIRE_SERVER_TOKEN# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Je kan nu de nieuwe容器lanceren:

1 2
docker-compose停止Docker-compose up -d

赫斯特伦·范尼涅尔肯德·黑火装置

Als je een fout krijgt tijdens het profileren, verhoog dan het Blackfire logniveau om meer informatie in de logs te krijgen:

1 2 3 4 5 6 7
——/ php . ini+ + + b / php . ini@@ -10,3 +10,4 @@ zend.detect_unicode=关闭[blackfire] #使用php_blackfire.dll在Windows扩展=blackfire.so+ blackfire.log_level = 4

Herstart de webserver:

1 2
ob娱乐下载symfony服务器:停止ob娱乐下载Symfony服务器:start -d

环境日志:

1
ob娱乐下载symfony服务器:日志

剖面仪opnieuw en控制器de uitvoer van de log。

产品配置中的黑火

Blackfire是alle Platform.sh项目中的标准opgenome。

Zet德服务器inloggegeevens op als综合国力geheimen:

1 2 3 4
ob娱乐下载Symfony控制台的秘密:BLACKFIRE_SERVER_ID - env =刺激# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxob娱乐下载Symfony控制台的秘密:BLACKFIRE_SERVER_TOKEN - env =刺激# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

PHP探针是reeds geactiveerd, op dezelfde manier als iedere andere benodigde PHP extensie:

.platform.app.yaml
1 2 3 4 5 6 7 8 9 10
运行时:扩展:-apcu-黑焰-ctype-iconv-mbstring-pdo_pgsql--xsl

漆组态漆黑火漆

Voordat je kan startten met profileren, moet je een manier vinden om de Varnish HTTP-cache te omzeilen。Zo niet, dan zal Blackfire noit de php application raken。我将会继续在这里工作。

Vind jouw huidige ip地址:

1
curl https://ifconfig.me/

En gebruik het om配置清漆:

12 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.vcl@@ -1,3 +1,11 @@+acl配置{+ #授权本地IP地址(替换为上面找到的IP)+“192.168.0.1”;授权Blackfire服务器+“46.51.168.2”;+“54.75.240.245”;+}+Sub vcl_recv {set req。Backend_hint = application.backend();设置req.http。代理能力= "abc=ESI/1.0";@@ -8,6 +16,16 @@ sub vcl_recv {} return(清除);}++ #不要分析ESI请求+ if (req.esi_level > 0) {+取消req.http.X-Blackfire-Query;+}++ #绕过清漆时,配置文件请求来自一个已知IP+ if (req.http。x - blackfire -查询&&客户端。IP ~配置文件){+ return (pass);+}} sub vcl_backend_response {

我看你的部署。

Webpagina的profileren

Je kan traditionele webpagina's van Firefox of谷歌Chrome profileren viaspeciale extensies

Vergeet op jouw lokale machine niet om de HTTP cache uit te schakelen in配置/包/ framework.yaml.Zo niet,但zal je de Symfob娱乐下载ony HTTP缓存laag在plaats van je特征代码profileren。

在生产方面的应用,在生产方面的应用,在生产方面的应用。标准maakt jouw lokale omgeving gebruik van de "ontwikkelomgeving", die een aanzienlijke overhead toevoegt (voornamelijk voor het verzamelen van gegevens voor de web调试工具栏en de Symfony profiler)。ob娱乐下载

请注意

Aangezien we de“productie”omullen profileren hoeven we niets te wijzigen in de configuratie, omdat we in even vorig hoofdstuk de Symfony Hob娱乐下载TTP cache laag enkel voor de“ontwikkel”omgeving hebben geactiveerd。

Het overschakelen van jouw lokale机器naar de productieomgeving kan worden gedaan door deAPP_ENVOmgevingsvariabele in het.env.localBestand te wijzigen:

1
APP_ENV =刺激

耶昆特赫特服务器:刺激突击队gebruiken:

1
ob娱乐下载symfony服务器:刺激

Vergeet niet om aan heet einde van jouw profileringssessie terug te schakelen naar dev:

1
ob娱乐下载Symfony服务器:prod -off

API-resources profileren

Het profileren van de API de SPA kan better vanaf de CLI worden gedaan via de Blackfire CLI Tool die je eerder hebt geïnstalleerd:

1
Blackfire curl的sob娱乐下载ymfony var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL被

Het黑焰旋度突击队员接受准确的选择旋度

Prestaties vergelijken

在“缓存”中,我们甚至可以缓存到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到“缓存”到。Omdat je slecht kan raden of enaanpassing alles sneller of net trager maakt, kan het zijn dat je fout raad en je jouw applied juw langzamer maakt in platats van sneller。

Je zou altijd de impact van elke uitgeverde optimalisatie moeten meten met een profiler。黑火maakt dit visueel gemakkelijker dankzij devergelijkingsfunctie

Het schrijven van functionele blackboxtesten

我们在功能测试中遇到了Symfony。ob娱乐下载黑火,在冲浪的场景下,我的手在那里Blackfire-playerKunnen worden uitgevoerd。后来,我们甚至场景schrijven dat甚至nieuw commentaar indient en deze valideert通过电子邮件链接在开发中通过de admin在生产中。

Maak甚至.blackfire.yamlBestand aan met de volgende inhoud:

.blackfire.yaml
12 34 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
场景:| #!黑焰-player group login visit url('/login') submit button("Sign in") param username "admin" param password "admin" expect status_code() == 302 scenario name "Submit a comment on the Amsterdam conference page" include login visit url('/fr/conference/amsterdam-2019') expect status_code() == 200 submit button("Submit") param comment_form[author] 'Fabien' param comment_form[email] 'me@example.com' param comment_form[text] 'Such a good conference!' param comment_form[photo] file(fake('simple_image', '/tmp', 400, 300, 'png', true, true), 'placeholder-image.jpg') expect status_code() == 302 follow expect status_code() == 200 expect not(body() matches "/Such a good conference/") # Wait for the workflow to validate the submissions wait 5000 when env != "prod" visit url(webmail_url ~ '/messages') expect status_code() == 200 set message_ids json("[*].id") with message_id in message_ids visit url(webmail_url ~ '/messages/' ~ message_id ~ '.html') expect status_code() == 200 set accept_url css("table a").first().attr("href") include login visit url(accept_url) # we don't check the status code as we can deal # with "old" messages which do not exist anymore # in the DB (would be a 404 then) when env == "prod" visit url('/admin') expect status_code() == 302 follow click link("Comments") expect status_code() == 200 set comment_ids css('table.table tbody tr').extract('data-id') with id in comment_ids visit url('/admin/comment/review/' ~ id) # we don't check the status code as we scan all comments, # including the ones already reviewed visit url('/fr/') wait 5000 visit url('/fr/conference/amsterdam-2019') expect body() matches "/Such a good conference/"

下载de Blackfire-player om het scenario lokaal te kunnen uitvoeren:

1 2 3
curl -OLsS https://get.blackfire.io/blackfire-player.pharChmod +x blackfire-player.pharcp /home/fabien/Code/github/blackfireio / blackfire.io /播放器/ blackfire-player。phar blackfire-player.phar

Voer dit场景适用于开发:

1
/ blackfire-player。运行——端点= ' symfony varob娱乐下载:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL .blackfire。yaml——变量"webmail_url= ob娱乐下载' symfony var:export MAILER_WEB_URL 2>/dev/null ' "——变量=“env = dev”vv
1
rm blackfire-player.phar

产品的:

1
/ blackfire-player。Phar run——endpoint= 'ob娱乐下载 sob直播appymfony cloud:env:url——pipe——primary ' .blackfire。yaml——变量“webmail_url =没有”——变量=“env =刺激”vv

“黑火”场景的触发和要求——黑焰参数。

自动变速器性能控制

Het managen van de prestaties是niet alleen Het verbeteren van de prestaties van bestaande代码,maar ook Het controleren er geen prestatie-regressies worden geïntroduceerd。

在连续集成工作流程的生产管理基础上,上述章节中的场景是在连续集成工作流程中自动实现的。

平台。sh maakt het mogelijk omDe scenario’s uit te voerenWanneer je even nieuwe branch maakt of deployed naar productie om de prestaties van de nieuwe code automatich te controller。

此工作,包括代码示例,是根据知识共享协议BY-NC-SA 4.0许可证。