ob娱乐下载Symfony Internals entdecken

ob娱乐下载Symfony Internals entdecken

维尔弗文登Symfony sob娱乐下载chon seit geramer Zeit,嗯,eine leistungsstarke安文东祖恩威克,阿伯德größte Teil des von Anwendung ausgeführten代码斯塔姆冯Symfony。Ein parar hundt Zeilen Code im Vergleich zu tausenden Zeilen Code。

我是世界上最棒的,我是世界上最棒的。在我的战争中,我的工具,我的工具,我的工具,我的工具。Das erste Mal, als ich einen Schritt-für-Schritt调试器benutzt habe oder Das erste Malptraceentdeckte sind magische Erinnerungen。

Möchtest Du besser verstehen, wie ob娱乐下载Symfony funktioniert?这是一个时代,这是一个时代,这是一个时代。ob娱乐下载HTTP-Request austhetischer Sob娱乐下载icht behandelt, was ziemlich langweilig wäre, werden wir Blackfire verwenden, um einige visuelle Darstellungen zu erhalten and um einige forgeseschrittenere Themen zu erkunden。

ob娱乐下载Symfony内部mit黑火verstehen

Du weißt bereits, dass alle HTTP-Requests von einem einzigen einstegspunkt verarbeitet werden: der公共/ index . php-Datei。阿贝尔是被动的nächstes?Wie werden Controller aufgerufen?

Lass uns die englische主页在生产mit Blackfire über die Blackfire- browsererweiterung analysieren:

1
ob娱乐下载symfony远程:开放

Oder direkt über die Kommandozeile:

1
Blackfire curl 'ob娱乐下载 sob直播appymfony cloud:env:url——pipe——primary ' en/

Gehe zur“Timeline”-Ansicht des Profils。Du solltest etwas sehen, das dem Folgenden ähnlich siht:

/

Bewege den Mauszeiger über die farbigen Balken,嗯weitere Informationen zu jedem Anruf zu erhalten;Du wfirst viel darüber leren, wie ob娱乐下载Symfony funktioniert:

  • Der haupteinstegspunkt ist公共/ index . php
  • 内核:处理()Methode behandelt die Anfrage;
  • Sie ruft书房HttpKernelauf, der einige事件;
  • Das erste Event istRequestEvent
  • ControllerResolver: getController ()-Methode bird aufgerufen, um zu bestimmen, welcher Controller für die eingehende URL aufgerufen werden soll;
  • ControllerResolver: getArguments ()-Methode bird aufgerufen, um zu bestimmen, welche Argumente an den Controller übergeben werden sollen (der Parameter-Konverter bird aufgerufen);
  • ConferenceController:指数()-Methode waufgerufen und der Großteil unseres Codes wdurch diesen Aufruf ausgeführt;
  • ConferenceRepository: findAll ()-Methode holt alle Konferenzen ausder Datenbank (beachte die Verbindung zur Datenbank überPDO: __construct ());
  • 树枝\环境::渲染()-方法渲染das模板;
  • 达斯ResponseEvent和达斯FinishRequestEventwerden ausgelöst, aber es sieht so aus, als ob keine听众注册信德,da sie sehr schnell verarbeitet信德。

Die Timeline ist eine gute Möglichkeit zu verstehen, wie der Code funktioniert;是sehr nützlich ist, wenn Du ein Projekt von jemand anderem entwickeln lässt。

在发展环境中分析修女死亡gleiche Seite von der lokalen Maschine

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

Öffne das简介。Da die Anfrage sehr schnell war and die Timeline ziemlich leer wäre, solltest Du zur Call-Graph-Ansicht weitergeleitet werden:

/

Verstehst Du, hier vor sich geht?http -缓存解析器和解析器。ob娱乐下载Da sich die Seite im Cache befindet, erhältHttpCache \商店:restoreResponse ()die HTTP-Response aus seinem Cache und under Controller wd nie aufgerufen。

Deaktiviere die Cache-Ebene in公共/ index . php我是施里特和施里特。Du siehst sofort, dass das Profil ganz anders aussieht:

/

Die Hauptunterschiede信和Die folgenden:

  • 达斯TerminateEvent, welches in Production nicht sichtbar war, nimt einen großen Teil der Ausführungszeit in Anspruch;bei genauerem Hinsehen siehst Du, dass dies das Event ist, das für die Speicherung der während der Anfrage gesammelten ob娱乐下载Symfony-Profilerdaten verantwortlich ist;
  • 海滩在他们下面ConferenceController:指数()-Aufruf死SubRequestHandler:处理()-Methode, die das ESI rendert (deshalb haben wir zwei Aufrufe zu .分析器:saveProfile (), einen für den Haupt-Request und einen für das ESI)。

Erkunde die Timeline, um mehr zu erfahren;在《叫图》里的wechsle,嗯eine andere Darstellung der gleichen Daten zu erhalten。

Wie wir gerade erfahren haben,在开发和生产ausgeführte Code sehr verschieden。Die Development-Environment ist langsamer, der Symob娱乐下载fony-Profiler versucht, viele Daten zu sammeln, um das Debugging von problem - zu erleichtern。Deshalb solltest Du für模具分析浸入模具生产环境nutzen, auch lokal。

Einige interessante实验:Analysiere eine Fehlerseite, Analysiere die/-网站(welche ein Redirect ist),订购api -资源。耶德斯的《奇异的diich etwas mehr》darüber lehren, wie Symfony fob娱乐下载unktioniert, welche Klassen/Methoden aufgerufen werden, was teuer and was billg in der Ausführung ist。

Das Blackfire调试插件verwenden

嗯,große Nutzlasten und große Graphen zu vermeiden entfernt Blackfire standardmäßig alle Methodenaufrufe, die niht signifikant genug sind。Wenn Du Blackfire调试工具verwendest, ist es besser, alle Aufrufe zu代表。死鸟durch das调试addon ermöglicht。

Verwende von der Befehlszeile aus das——调试国旗:

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

/

你看见她了吗?Platform.sh führt einige Optimierungen bei der Bereitstellung einer ob娱乐下载Symfony-Anwendung durch, wie z. B. die Optimierung des composer - autotoloader (——optimize-autoloader——apcu-autoloader——classmap-权威).乐观的人死在现实中.env-Datei definierten environmental - variablen (um zu vermeiden, dass die Datei für jede Anforderung geparst wild), indem es die.env.local.php-Datei erzeugt:

1
ob娱乐下载Symfony运行作曲家dump-env prod

黑火ist ein sehr mächtiges工具,das zu verstehen hilft, wie Code von PHP ausgeführt wid。Die Verbesserung der Performance ist nur eine Möglichkeit, einen Profiler zu nutzen。

Einen Schritt-für-Schritt Debugger (Step Debugger) mit Xdebug nutzen

黑火时间线和呼叫-图表-安施滕厄罗本恩特威勒*innen zu visualisieren welche Dateien/Funktionen/Methoden von der PHP-Engine ausgeführt werden, um besser die code - base des Projektes zu versteen。

在我们的世界Code-Ausführung在我们的世界一步调试器体育运动Xdebug.Ein solcher Debugger erlaubt es Entwickler*innen interaktiv und Schritt für Schritt den Code eines PHP-Projektes zu durchlaufen, um den Control Flow (Ablauf) zu debuggen und Datenstrukturen zu untersuchen。Er ist sehr hilfreich um unerwartetes Verhalten zu debug und ersetzt die übliche "var_dump()/exit()"- debug - technik。

Installiere zuerst diexdebug-PHP-Erweiterung。Kontrolliere mit diesem Befehl ob sie installiert ist:

1
ob娱乐下载Symfony PHP

Du solltest Xdebug in der Ausgabe sehen:

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

Du kannst auch im Browser kontrollieren, ob Xdebug für PHP-fPM aktiviert ist, in dem Du auf den "View phpinfo()"-链接klickst, wenn Du über das Symob娱乐下载fony Logo in der Web-Debug-Toolbar mit der Maus drüberfährst:

/

好的,aktiviere jetzt den调试-Mode von Xdebug:

php . ini
1 2 3
(xdebug)xdebug.mode=调试xdebug.start_with_request是的

Standardmäßig schickt Xdebug Daten zum端口9003 des lokalen主机。

Xdebug可以看到我们的艺术auslösen, aber am einfachsten ist Xdebug von Deiner IDE zu bedienen。在dieem Kapitel werden wir Visual Studio代码nutzen um zu zeigen wie es funktioniert。Installiere死PHP调试-Erweiterung durch das start ten der“Quick Open”-Funktion (Ctrl + P), füge den folgenden Befehl ein und drück输入:

1
Ext安装felixfbecker.php-debug

Erstelle die folgende konfigations - datei:

.vscode / launch.json
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
“版本”“0.2.0”“配置”: [{“名称”“监听XDebug”“类型”“php”“请求”“启动”“端口”9003}, {“名称”启动当前打开的脚本“类型”“php”“请求”“启动”“程序”" $ {file} "“鹿”" $ {fileDirname} "“端口”9003}]}

Gehe innerhalb Visual Studio Code und in Deinem Projekt-Verzeichnis zu dem Debugger und klick auf den grünen play-Button der mit "Listen for Xdebug" beschrifet ist:

Wenn Du in Deinem Browser die Seite aktualisierst, sollte die IDE automatisch in den Vordergrund kommen。Dies bedeet, dass die debug - session bereit ist。Standardmäßig ist alles ein Breakpoint (Haltepunkt), weshalb die Ausführung beim ersten Befehl stoppt。Es liegt dann an Dir, die aktuellen Variablen zu prüfen, über den Code drüber zugehen, in den Code reinzugehen,…

Während des Debugging kannst Du den "Everything"-断点deaktivieren und selbst Deinem代码定义中的断点。

Wenn Du noch nie mit Schritt-für-Schritt Debuggern gearbeitet hast, lese dieausgezeichneten教程für Visual Studio代码, welche alles visuell erklären。

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