管理绩效
管理绩效
过早的优化是万恶之源。
也许你以前已经读过这句话了。但我想全文引用:
我们应该忘记小的效率,大约97%的时候:过早的优化是万恶之源。然而,我们不应该错过这关键的3%的机会。
——唐纳德·克努特
即使是很小的性能改进也会产生影响,尤其是对电子商务网站而言。现在留言簿应用程序已经准备就绪,让我们看看如何检查它的性能。
查找性能优化的最佳方法是使用分析器.现在最流行的选择是黑焰(完整的免责声明:我也是Blackfire项目的创始人)。
介绍黑焰
《Blackfire》由以下几个部分组成:
- 一个客户端触发配置文件(Blackfire CLI工具或谷歌Chrome或Firefox的浏览器扩展);
- 一个代理在发送到黑火前准备和汇总数据。IO用于显示;
- 一个PHP扩展探针),用来编写PHP代码。
要和黑火合作,你首先需要报名.
通过运行以下快速安装脚本在本地机器上安装Blackfire:
1
$Curl https://installer.blackfire.io/installer.sh | bash
这个安装程序下载并安装Blackfire CLI工具。
完成后,在所有可用的PHP版本上安装PHP探针:
1
$Sudo blackfire php:安装
并为我们的项目启用PHP探测:
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
重新启动web服务器,以便PHP可以加载Blackfire:
1 2
$ob娱乐下载symfony服务器:停止$ob娱乐下载Symfony服务器:start -d
Blackfire命令行工具需要个人配置客户端凭据(将项目概要存储在个人帐户下)。在山顶找到他们设置/凭证
页面并通过替换占位符执行以下命令:
1
$Blackfire客户端:config——client-id=xxx——client-token=xxx
在Docker上设置Blackfire代理
Blackfire代理服务已经在Docker撰写堆栈中配置:
要与服务器通信,您需要获取您的个人信息服务器凭证(这些凭证确定了您想要存储概要文件的位置——您可以为每个项目创建一个);他们可以在底部找到设置/凭证
页面.把它们作为秘密保存起来:
1 2 3 4
$ob娱乐下载Symfony控制台的秘密:集BLACKFIRE_SERVER_ID# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx$ob娱乐下载Symfony控制台的秘密:集BLACKFIRE_SERVER_TOKEN# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
你现在可以启动新的容器:
1 2
$docker-compose停止$Docker-compose up -d
修复一个不工作的黑火安装
如果您在分析时遇到错误,请增加Blackfire日志级别以在日志中获得更多信息:
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
重新启动web服务器:
1 2
$ob娱乐下载symfony服务器:停止$ob娱乐下载Symfony服务器:start -d
跟在圆木后面:
1
$ob娱乐下载symfony服务器:日志
重新配置文件,检查日志输出。
在生产环境中配置Blackfire
Blackfire默认包含在所有Platform.sh项目中。
设置服务器凭证,生产秘密:
1 2 3 4
$ob娱乐下载Symfony控制台的秘密:集BLACKFIRE_SERVER_ID - env =刺激# xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx$ob娱乐下载Symfony控制台的秘密:集BLACKFIRE_SERVER_TOKEN - env =刺激# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PHP探针已经像任何其他所需的PHP扩展一样启用:
为黑火配置清漆
在部署以开始分析之前,您需要一种绕过Varnish HTTP缓存的方法。否则,Blackfire将永远不会击中PHP应用程序。您将只对来自本地机器的分析请求授权绕过Varnish。
找到您当前的IP地址:
1
$curl https://ifconfig.me/
并使用它来配置Varnish:
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 {
现在可以部署了。
网页概要
您可以配置从Firefox或谷歌Chrome通过他们的传统网页专用的扩展.
在您的本地机器上,不要忘记禁用HTTP缓存配置/包/ framework.yaml
分析时:如果没有,您将分析Symfony HTTP缓存层,而不是您自己的代码。ob娱乐下载
为了更好地了解应用程序在生产环境中的性能,还应该对“生产”环境进行概要分析。默认情况下,您的本地环境使用“开发”环境,这增加了显著的开销(主要是为web调试工具栏和Symfony分析器收集数据)。ob娱乐下载
请注意
由于我们将对“生产”环境进行概要分析,因此配置中没有什么需要更改的,因为我们在前一章中仅为“开发”环境启用了Symfony HTTP缓存层。ob娱乐下载
将本地机器切换到生产环境可以通过更改APP_ENV
环境变量.env.local
文件:
1
APP_ENV =刺激
或者你可以用服务器:刺激
命令:
1
$ob娱乐下载symfony服务器:刺激
当你的分析结束时,不要忘记把它切换回开发模式:
1
$ob娱乐下载Symfony服务器:prod -off
剖析API资源
分析API或SPA最好通过您之前安装的Blackfire CLI Tool在CLI上完成:
1
$Blackfire curl的sob娱乐下载ymfony var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL被
的黑焰旋度
命令接受完全相同的参数和选项旋度.
比较性能
在关于“缓存”的步骤中,我们添加了一个缓存层来提高代码的性能,但我们没有检查或测量更改对性能的影响。由于我们都不善于猜测什么会快,什么会慢,您可能会遇到这样的情况:进行一些优化实际上会使应用程序变慢。
您应该始终衡量使用分析器所做的任何优化的影响。Blackfire使它在视觉上更容易比较功能.
编写黑盒功能测试
我们已经了解了如何使用Symfony编写功能测试。ob娱乐下载Blackfire可用于编写浏览场景,这些场景可通过黑焰的球员.让我们编写一个场景,提交一个新的评论,并通过开发中的电子邮件链接和生产中的管理员验证它。
创建一个.blackfire.yaml
文件内容如下:
下载Blackfire播放器可以在本地运行场景:
1 2 3
$curl -OLsS https://get.blackfire.io/blackfire-player.phar$Chmod +x blackfire-player.phar$cp /home/fabien/Code/github/blackfireio / blackfire.io /播放器/ blackfire-player。phar blackfire-player.phar
在开发中运行此场景:
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
Blackfire场景还可以为每个请求触发概要文件并通过添加——黑焰
国旗。