发现Symfony内部ob娱乐下载
发现Symfony内部ob娱乐下载
我们使用Symfony开发强大的应用程ob娱乐下载序已经有一段时间了,但是应用程序执行的大部分代码都来自Symfony。几百行代码vs几千行代码。
我喜欢了解幕后的事情。我一直对帮助我理解事物工作原理的工具着迷。我第一次使用步进调试器或者我第一次发现ptrace
都是神奇的记忆。
您想更好地了解Symfony是如何工作的吗?ob娱乐下载是时候深入了解Symfony如何使您的应用ob娱乐下载程序运行了。我们不再从理论的角度描述Symfony如何处理HTTob娱乐下载P请求,这将非常枯燥,我们将使用Blackfire来获得一些可视化表示,并使用它来发现一些更高级的主题。
了解Symfony内部与Blob娱乐下载ackfire
您已经知道,所有HTTP请求都由一个入口点提供服务:公共/ index . php
文件。但接下来会发生什么?如何调用控制器?
让我们通过Blackfire浏览器扩展来配置生产中的英文主页:
1
$ob娱乐下载symfony远程:开放
或者直接通过命令行:
1
$Blackfire curl 'ob娱乐下载 sob直播appymfony cloud:env:url——pipe——primary ' en/
转到配置文件的“Timeline”视图,你应该会看到类似下面的内容:
从时间轴上,悬停在彩色条上可以获得关于每个呼叫的更多信息;你会学到很多关于Symfony是如何工作的:ob娱乐下载
- 主要的切入点是
公共/ index . php
; - 的
内核:处理()
方法处理请求; - 它调用
HttpKernel
这分派了一些事件; - 第一个事件是
RequestEvent
; - 的
ControllerResolver: getController ()
方法被调用,以确定应该为传入URL调用哪个控制器; - 的
ControllerResolver: getArguments ()
方法来确定将哪些参数传递给控制器(调用参数转换器); - 的
ConferenceController:指数()
方法被调用,我们的大部分代码都由这个调用执行; - 的
ConferenceRepository: findAll ()
方法从数据库获取所有会议(请注意到数据库的连接是通过PDO: __construct ()
); - 的
树枝\环境::渲染()
方法呈现模板; - 的
ResponseEvent
和FinishRequestEvent
都被分派了,但实际上似乎没有注册侦听器,因为它们执行起来似乎非常快。
时间轴是理解一些代码如何工作的好方法;当你得到别人开发的项目时,这是非常有用的。
现在,在开发环境中配置本地机器上的相同页面:
1
$Blackfire curl的sob娱乐下载ymfony var:出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL没有/
打开概要文件。你应该被重定向到调用图视图,因为请求非常快,时间轴会非常空:
你知道发生了什么吗?HTTP缓存已启用,因此,我们正在分析Symfony HTTP缓存层。ob娱乐下载由于页面在缓存中,HttpCache \商店:restoreResponse ()
正在从它的缓存中获取HTTP响应,并且控制器从未被调用。
禁用缓存层公共/ index . php
正如我们在前一步中所做的那样,再试一次。你可以马上看到配置文件看起来非常不同:
主要区别如下:
- 的
TerminateEvent
这在生产中是不可见的,它占用了大量的执行时间;仔细观察,您可以看到这是负责存储请求期间收集的Symfony分析器数据的事件;ob娱乐下载 - 下
ConferenceController:指数()
调用,注意SubRequestHandler:处理()
方法来呈现ESI(这就是为什么我们有两个调用分析器:saveProfile ()
,一个用于主请求,一个用于ESI)。
探索时间轴了解更多;切换到调用图视图以获得相同数据的不同表示。
正如我们刚刚发现的,在开发和生产中执行的代码是完全不同的。由于Symfony分析器试图收集大量数据以缓解调试问题,因此开发环境变慢了。ob娱乐下载这就是为什么您应该始终使用生产环境进行概要分析,即使是在本地。
一些有趣的实验:分析错误页面,分析/
页面(这是一个重定向),或API资源。每个概要文件都将告诉您更多关于Symfony如何工作、调用哪些类/方法、运行的开销和开销。ob娱乐下载
使用Blackfire调试插件
默认情况下,Blackfire删除所有不重要的方法调用,以避免有大的有效负载和大的图。当使用Blackfire作为调试工具时,最好保留所有调用。这是由调试插件提供的。
从命令行使用——调试
国旗:
1 2
$调试curl的symfony var:ob娱乐下载出口ob娱乐下载SYMFONY_PROJECT_DEFAULT_ROUTE_URL没有/$Blackfire—调试symfony clouob娱乐下载d:ob直播appenv:url——pipe——primary ' en/
在生产环境中,您会看到加载一个名为.env.local.php
:
它从何而来?sh在部署Symfony应用程序时做了一些优化,比如优化Composer自动加载器(ob娱乐下载——optimize-autoloader——apcu-autoloader——classmap-权威
).方法中定义的环境变量也可以优化.env
文件(以避免为每个请求解析文件).env.local.php
文件:
1
$ob娱乐下载Symfony运行作曲家dump-env prod
Blackfire是一个非常强大的工具,可以帮助理解PHP如何执行代码。提高性能只是使用分析器的一种方式。
使用Xdebug的步进调试器
Blackfire时间线和调用图允许开发人员可视化PHP引擎执行哪些文件/函数/方法,以更好地理解项目的代码库。
跟踪代码执行的另一种方法是使用一步调试器就像Xdebug.步进调试器允许开发人员交互式地遍历PHP项目代码,以调试控制流和检查数据结构。这对于调试意外行为非常有用,它取代了常见的“var_dump()/exit()”调试技术。
首先,安装xdebug
PHP扩展。执行如下命令检查是否已安装。
1
$ob娱乐下载Symfony PHP
你应该在输出中看到Xdebug:
1 2 3 4 5 6
PHP 8.0.1 (cli)(编译:Jan 13 2021 08:22:35) (NTS)版权(c) PHP Group Zend Engine v4.0.1,版权(c) Zend Technologies with Zend OPcache v8.0.1,版权(c),由Zend Technologies with Xdebug v3.0.2,版权(c) 2002-2021,由Derick Rethans with blackfire v1.49.0~linux-x64-non_zts80, https://blackfire.io,由blackfire
你也可以通过在浏览器中点击“查看phpinfo()”链接来检查Xdebug是否为PHP-FPM启用,同时鼠标停留在web调试工具栏的Symfony标志上:ob娱乐下载
现在,启用调试
Xdebug模式:
默认情况下,Xdebug将数据发送到本地主机的9003端口。
触发Xdebug可以通过多种方式完成,但最简单的是从IDE中使用Xdebug。在本章中,我们将使用Visual Studio Code来演示它是如何工作的。安装PHP调试通过启动“快速打开”功能(Ctrl + P
),粘贴以下命令,按“enter”:
1
Ext安装felixfbecker.php-debug
创建如下配置文件:
从Visual Studio Code中,在项目目录中,进入调试器,单击标记为“监听Xdebug”的绿色播放按钮:
如果转到浏览器并刷新,IDE应该自动获得焦点,这意味着调试会话已经准备好了。默认情况下,所有内容都是断点,因此执行在第一条指令处停止。然后由你来检查当前变量,跨过代码,进入代码,……
在调试时,可以取消选中“Everything”断点,并在代码中显式地设置断点。
如果您不熟悉分步调试器,请阅读Visual Studio代码的优秀教程,它直观地解释了一切。