ステップ30:sy欧宝娱乐app下载地址mfonyの内部を知る

5.2版本
保持 不明意
5.0

欧宝娱乐app下载地址Symfonyの内部を知る

ここまで长い间S欧宝娱乐app下载地址ymfonyを使ってアプリケーションを开放してきました,ほとんどのコードはsymfony内部内部実际たれれいますかかたコードはいますかかかかのコードくらいで,symfony内部内部に数目くらいのコードがあります。

�Ptrace.を使ってみたとき记忆はは魔のよう感覚でしでした。

欧宝娱乐app下载地址symfonyがどうやって动画ているかよりよりかしたくなりませんか?symfonyがあなたのををを仕组み仕组みを调べみみましょう。理想的な视点からhttpリクエストリクエストをどうどう扱ってをををどう扱ってを说说するのではなくのではなくのではなくするするのではなくのではなくをを使って的使い使いを使い使いをみましょましょましょみましょましょましょみみましょ

Blackfireでsy欧宝娱乐app下载地址mfonyののを理念する

全て全てht​​tpリクエストリクエスト,公共/ index.php.

Blackfireのブラウザ拡张を使し,本番の英语ホームのプロファイリングをしてみみ

1
$ 欧宝娱乐app下载地址symfony遥控器:打开

もしくは直接コマンドラインで:

1
$ Blackfire Curl.`欧宝娱乐app下载地址Symfony Env:URL  - 首先`EN /

プロファイルの“时间线”へ行为と,次のような画面が表示れるです:

タイムラインでは,色の付いたバーにをポインタをホバーば,各呼び出しについてのより详细な情见る,symfonyがどうやっ欧宝娱乐app下载地址动词ているかを知ることができますますことができますます。

  • メインエントリーポイントは,公共/ index.php.です;
  • 内核::句柄()メソッドメソッドがリクエストを扱い;
  • イベントをディスパッチするhttpkernel.を呼び出します;
  • 最初のイベントは,REARETEVENT.です;
  • controllerresolver :: getController()メソッドは,やってきたurlからどのコントロラーが呼ばれるかします;
  • controllerresolver :: getarguments()メソッドは,コントローラーコントローラーどのどの数を渡すかし
  • ConferenceController :: index()メソッドメソッドが呼ばれれます呼び出しでほとんどの私たちがいたコードコードがが実れれ
  • conferencerepository :: findall()メソッドが,データベースから全てのカンファレンス取得します(PDO :: _构造()ででデータベース接続接続をしてます);
  • Twig \环境:: render()メソッドメソッドがテンプレートををレンダリングし;
  • 响应finishrequestevent.

タイムラインは,コードがどうやって动くをを理念するにに方法です;他の谁かが开放したプロジェクトを受け取ったにとても便利です。

开発环境,ローカルマシンから同じページをしましょう:

1
$ Blackfire Curl.`欧宝娱乐app下载地址symfony var:出口symfony_project_default_route_url`EN /

プロファイルを开いてください。リクエストはすぐ终わり,タイムラインはほとんど空の,コールグラフ画面へリダイレクトされるはずはずはず:

何何が效ましょうか说キャッシュ有效地れてので,symfony httpキャッ欧宝娱乐app下载地址シュのをプロファイルていしまっいるのですをしキャッシュてのですページはキャッシュている说はキャッシュているのです说プロファイルていしまっている说说はhttpcache \ store :: restoreresponse())にありhttpレスポンスレスポンスはキャッシュから取得れるのでコントローラーは呼ばことがないない呼ばことがない

前回前回のステップででやったようによう,もう一度公共/ index.php.内内のキャッシュレイヤーててにし全く违ったプロファイルプロファイルなっはずはずはずたたはず:

主主な违いはは次ののり:

  • 本番では,行排时间をかなり占めるterminatevent.はは见えませなぜならterminatevent.は,s欧宝娱乐app下载地址ymfonyプロファイラープロファイラーがリクエストを受けた际に集めたデータ格式する责务のだから
  • ConferenceController :: index()コールの下にsumrequesthandler :: handle()メソッドメソッドあります。このメソッドはesiをレンダリングしし。profiler :: saveprofile()が二度呼ばためてのはそのためです。一种度度はのリクエストリクエストです。



ここまで见てきたにに,开放环境と本番でコードはかなり违って実れますますますます。开放环境で欧宝娱乐app下载地址,symfonyプロファイラーがデバッグしようににのを集めとていますをそのとてい。环境でプロファイルをしたがが良い。

兴味深い実験とし,エラーページや/ページ(リダイレクトのページ),APIリソースをプロファイルしてててくださいくださいください。各各プ欧宝娱乐app下载地址ロファイルsymfonyがどうやって动漫ている,少し知ることができます。例えば,どのクラスますが呼ば,何どのクラスメソッドが呼ば,何何时间がかかっていい,何がすぐ终わっていするか,などです。

Blackfireののデバッグアドオンを使用する

デフォルトでは,Blackfireは,大きいペイロードやグラフ避ける避けるためにあまり重要でないメソッドを全て除去ししししかししかしをツールとしてしししを使际际ににはは全て呼び出し舍てないににおくことことベター舍て。デフォルトではできませが,デバッグのアドオンを入れることで可口にます。

コマンドラインからは,--debug.フラグを使使使てください:

1 2
$ blackfire --debug卷曲`欧宝娱乐app下载地址symfony var:出口symfony_project_default_route_url`en / $ blackfire --debug卷曲`欧宝娱乐app下载地址Symfony Env:URL  - 首先`EN /

本番では,.env.local.php.という名前のファイルがロードれるれるのが确认でき

欧宝娱乐app欧宝体育应用最新版app下载下载地址SYMFONYCLOUDは,SYMFONYアプリケーションをデプロイする际,最最适を行为ます。COMPOSERのオートローダーを最适最适のと同じようなもの(--optimize-autoloader.--apcu-autoloader.- classmap-xtititative.)。また,.env.local.php.ファイルによって生成される.env.ファイルに定义してある环境もも最适しリクエスト毎ファイルをパースしないにします

1
$ 欧宝娱乐app下载地址symfony运行composer dump-eng prod

Blackfireははコードがどうやってでを実解のとても役立つツールですパフォーマンスとても役立つツールですパフォーマンスとても役立つツールツールパフォーマンスとても役立つツールツールのれる役立つツールツールのれるかをツール

xdebugのステップ実行を利用する

Blackfireのタイムラインとコールグラフ,开放者者どのファイル/关联/メソッドがphpエンジン上ででででてか视覚视覚,プロジェクトプロジェクトのコードベースをよりよくよくするすることができことができことができことができことができことができことができ

コードの実行を追迹するするもうもうつつつのxdebug.のようなステップ実行,予想外部の动をデバッグするにとても役立ち,ありがちがち“var_dump()/ exit()”デバッグを置き换えることができ。

まず,xdebug.PHP拡张をインストールしう.xdebugがインストールされいることは次のコマンドでできます

1
$ 欧宝娱乐app下载地址symfony php -v

xdebugがが力量されるが见えます:

1 2 3 4 5 6
PHP 8.0.1(CLI)(内置:1月13日2021 08:22:35)(NTS)版权所有(c)PHP Group Zend Engine V4.0.1,版权所有(C)Zend Technologies与Zend OPCache V8.0.1,版权所有(c),由Zend Technologies使用Xdebug v3.0.2,版权所有(c)2002-2021,由Derick Rethans使用BlackFire v1.49.0〜Linux-x64-non_zts80,https://blackfire.io,by blackfire

xdebugがphp-fpmで有效になっているは,ブラウザに行,网页デバッグツールバーのsymfon欧宝娱乐app下载地址yロゴの上部にをを合唱团“查看phpinfo()”リンクをクリックすることでもできます

今度はxdebugの调试モードを有象にします:

php.ini.
1 2 3.
[xdebug]xdebug.mode.=调试xdebug.start_with_request.=是的

デフォルトでは,xdebugはローカルホストの9003ポートにデータを送り送り。

Xdebugを起动词方法はたくさんありますが,一道简介なのinからxdebugをを方法です。この章では视觉工作室代码をを,やり方向示します。“快速打开”(Ctrl + P.)を开き,次のコマンドを贴り付けてを押す,PHP调试拡张がインストールされます:

1
Ext安装felixfbecker.php-debug

次次の内容でで设定作爱作用

.vscode / launch.json.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19
{“版本”“0.2.0”“配置”[{“名称”“听xdebug”“类型”“php”“要求”“发射”“港口”9003},{“名称”“启动目前打开脚本”“类型”“php”“要求”“发射”“程序”“$ {file}”“CWD”“$ {filedirname}”“港口”9003}]}

Visual Studio代码でプロジェクトディレクトリに入り,デバッガーを开放て“聆听xdebug”とというラベルラベルのついたのの再ボタンボタンをクリックし:

../_images/vs-xdebug-run.png

ページをブラウザで开放て更新すると,自动的にideにフォーカスがますが,デバッグセッションが开放れことをします。デフォルトデフォルトは,全てはますポイントにて,最初がで実になっ,最初最初行止まります。开発者はその时钟ののを调べ,コードのステップを进め,进めて... ...

デバッグするときは, “一切” チェックを外してすべてをブレークポイントにするのをやめて,コードの中で明示的にブレークポイントを设定することができます。

もしステップ実行ががであれば,可视化工作室代码的优秀教程ををと良いう。ステップステップ行のををやすくやすく明してくれます。


  • “ 以前的ステップ29:パフォーマンスパフォーマンス致理性
  • 下一个 ”ステップ31:Redisににセッションを保存保存

这项工作包括代码样本,是在a下获得的许可Creative Commons By-NC-SA 4.0执照。