Profiler

The profiler is a powerful development tool that gives detailed information about the execution of any request.

プロファイラーは、リクエストの実行に関する詳細な情報を提供する強力な開発ツールです。

Caution

注意

Never enable the profiler in production environments as it will lead to major security vulnerabilities in your project.

プロジェクトで重大なセキュリティの脆弱性につながるため、本番環境ではプロファイラーを有効にしないでください。

Installation

In applications using Symfony Flex, run this command to install the profiler Symfony pack before using it:

Symfony Flex を使用するアプリケーションでは、次のコマンドを実行して、使用する前にプロファイラー Symfony パックをインストールします。
1
$ composer require --dev symfony/profiler-pack

Now, browse any page of your application in the development environment to let the profiler collect information. Then, click on any element of the debug toolbar injected at the bottom of your pages to open the web interface of the Symfony Profiler, which will look like this:

ここで、開発環境でアプリケーションの任意のページを参照して、プロファイラーが情報を収集できるようにします。次に、ページの下部に挿入された debugtoolbar の任意の要素をクリックして、Symfony Profiler の Web インターフェースを開きます。これは次のようになります。

Note

ノート

The debug toolbar is only injected into HTML responses. For other kinds of contents (e.g. JSON responses in API requests) the profiler URL is available in the X-Debug-Token-Link HTTP response header. Browse the /_profiler URL to see all profiles.

デバッグ ツールバーは、HTML 応答にのみ挿入されます。他の種類のコンテンツ (API 要求の JSON 応答など) の場合、プロファイラー URL は X-Debug-Token-Link HTTP 応答ヘッダーで使用できます。 /_profilerURL を参照して、すべてのプロファイルを表示します。

Accessing Profiling Data Programmatically

Most of the times, the profiler information is accessed and analyzed using its web-based interface. However, you can also retrieve profiling information programmatically thanks to the methods provided by the profiler service.

ほとんどの場合、プロファイラー情報は Web ベースのインターフェースを使用してアクセスおよび分析されます。ただし、プロファイラー サービスによって提供されるメソッドのおかげで、プロファイリング情報をプログラムで取得することもできます。

When the response object is available, use the loadProfileFromResponse() method to access to its associated profile:

応答オブジェクトが利用可能になったら、loadProfileFromResponse() メソッドを使用して、関連付けられたプロファイルにアクセスします。
1
2
// ... $profiler is the 'profiler' service
$profile = $profiler->loadProfileFromResponse($response);

When the profiler stores data about a request, it also associates a token with it; this token is available in the X-Debug-Token HTTP header of the response. Using this token, you can access the profile of any past response thanks to the loadProfile() method:

プロファイラーがリクエストに関するデータを保存するとき、トークンも関連付けます。このトークンは、レスポンスの X-Debug-Token HTTP ヘッダーで使用できます。このトークンを使用すると、loadProfile のおかげで過去のレスポンスのプロファイルにアクセスできます。 () 方法:
1
2
$token = $response->headers->get('X-Debug-Token');
$profile = $profiler->loadProfile($token);

Tip

ヒント

When the profiler is enabled but not the web debug toolbar, inspect the page with your browser's developer tools to get the value of the X-Debug-Token HTTP header.

プロファイラーが有効になっていて Web デバッグ ツールバーが有効になっていない場合は、ブラウザーの開発者ツールを使用してページを調べ、X-Debug-TokenHTTP ヘッダーの値を取得します。

The profiler service also provides the find() method to look for tokens based on some criteria:

プロファイラー サービスは、いくつかの基準に基づいてトークンを検索するための find() メソッドも提供します。
1
2
3
4
5
6
7
8
9
10
11
// gets the latest 10 tokens
$tokens = $profiler->find('', '', 10, '', '', '');

// gets the latest 10 tokens for all URL containing /admin/
$tokens = $profiler->find('', '/admin/', 10, '', '', '');

// gets the latest 10 tokens for local POST requests
$tokens = $profiler->find('127.0.0.1', '', 10, 'POST', '', '');

// gets the latest 10 tokens for requests that happened between 2 and 4 days ago
$tokens = $profiler->find('', '', 10, '', '4 days ago', '2 days ago');

Data Collectors

The profiler gets its information using some services called "data collectors". Symfony comes with several collectors that get information about the request, the logger, the routing, the cache, etc.

プロファイラーは、「データ コレクター」と呼ばれるいくつかのサービスを使用して情報を取得します。Symfony には、リクエスト、ロガー、ルーティング、キャッシュなどに関する情報を取得するいくつかのコレクターが付属しています。

Run this command to get the list of collectors actually enabled in your app:

次のコマンドを実行して、アプリで実際に有効になっているコレクターのリストを取得します。
1
$ php bin/console debug:container --tag=data_collector

You can also create your own data collector to store any data generated by your app and display it in the debug toolbar and the profiler web interface.

独自のデータ コレクターを作成して、アプリによって生成されたデータを保存し、デバッグ ツールバーとプロファイラー Web インターフェイスに表示することもできます。

Timing the Execution of the Application

If you want to measure the time some tasks take in your application, there's no need to create a custom data collector. Instead, use the built-in utilities to profile Symfony applications.

アプリケーションでいくつかのタスクにかかる時間を測定したい場合、カスタム データ コレクターを作成する必要はありません。代わりに、組み込みユーティリティを使用して Symfony アプリケーションのプロファイルを作成してください。

Tip

ヒント

Consider using a professional profiler such as Blackfire to measure and analyze the execution of your application in detail.

Blackfire などの専門的なプロファイラーを使用して、アプリケーションの実行を詳細に測定および分析することを検討してください。

Enabling the Profiler Programmatically

Symfony Profiler can be enabled and disabled programmatically. You can use the enable() and disable() methods of the Profiler class in your controllers to manage the profiler programmatically:

Symfony プロファイラーは、プログラムで有効または無効にすることができます。コントローラーで Profilerclass の enable() および disable() メソッドを使用して、プロファイラーをプログラムで管理できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Symfony\Component\HttpKernel\Profiler\Profiler;
// ...

class DefaultController
{
    // ...

    public function someMethod(?Profiler $profiler)
    {
        // $profiler won't be set if your environment doesn't have the profiler (like prod, by default)
        if (null !== $profiler) {
            // if it exists, disable the profiler for this particular controller action
            $profiler->disable();
        }

        // ...
    }
}

In order for the profiler to be injected into your controller you need to create an alias pointing to the existing profiler service:

プロファイラーをコントローラーに挿入するには、既存のプロファイラー サービスを指すエイリアスを作成する必要があります。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
# config/services_dev.yaml
services:
    Symfony\Component\HttpKernel\Profiler\Profiler: '@profiler'

Updating the Web Debug Toolbar After AJAX Requests

Single-page applications (SPA) are web applications that interact with the user by dynamically rewriting the current page rather than loading entire new pages from a server.

シングルページ アプリケーション (SPA) は、サーバーから新しいページ全体を読み込むのではなく、現在のページを動的に書き換えることによってユーザーと対話する Web アプリケーションです。

By default, the debug toolbar displays the information of the initial page load and doesn't refresh after each AJAX request. However, you can set the Symfony-Debug-Toolbar-Replace header to a value of 1 in the response to the AJAX request to force the refresh of the toolbar:

デフォルトでは、デバッグ ツールバーには最初のページ ロードの情報が表示され、各 AJAX 要求の後で更新されません。ただし、AJAX リクエストへの応答で Symfony-Debug-Toolbar-Replace ヘッダーを値 1 に設定して、ツールバーを強制的に更新することができます。
1
$response->headers->set('Symfony-Debug-Toolbar-Replace', 1);

Ideally this header should only be set during development and not for production. To do that, create an event subscriber and listen to the kernel.response event:

理想的には、このヘッダーは開発中にのみ設定し、本番環境では設定しないでください。これを行うには、イベント サブスクライバーを作成し、kernel.responseevent をリッスンします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Symfony\Component\HttpKernel\Event\ResponseEvent;

// ...

public function onKernelResponse(ResponseEvent $event)
{
    if (!$event->getKernel()->isDebug()) {
        return;
    }

    $request = $event->getRequest();
    if (!$request->isXmlHttpRequest()) {
        return;
    }

    $response = $event->getResponse();
    $response->headers->set('Symfony-Debug-Toolbar-Replace', 1);
}