##blackfireとは
パフォーマンスプロファイリングサービスです。
関数がどの経路で読み込んでいて、
どのくらい処理に時間がかかり、
どのくらいメモリを使用しているのか、
目視で確認できるので、アプリケーションのパフォーマンス向上などに使用します。
##用意するもの
- docker(念の為最新にしておきましょう)
- blackfireのアカウント(ここから作れるよ!)
- chrome(拡張機能も使うので入れておく)
- 挫けない心
##環境を構築していく
blackfire:
image: blackfire/blackfire
ports: ["8707"]
environment:
BLACKFIRE_SERVER_ID: {サーバーキー}
BLACKFIRE_SERVER_TOKEN: {サーバートークン}
BLACKFIRE_CLIENT_ID: {クライアントキー}
BLACKFIRE_CLIENT_TOKEN: {クライアントトークン}
サーバーキー・トークン、クライアントキー・トークンは、blackfireのマイページから確認できます。
RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;") \
&& curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/alpine/amd64/$version \
&& mkdir -p /tmp/blackfire \
&& tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp/blackfire \
&& mv /tmp/blackfire/blackfire-*.so $(php -r "echo ini_get ('extension_dir');")/blackfire.so \
&& printf "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8707\n" > $PHP_INI_DIR/conf.d/blackfire.ini \
&& rm -rf /tmp/blackfire /tmp/blackfire-probe.tar.gz
用意していたDockerfileに追記する形で問題ありません。
また、すでに構築ずみの環境でしたら、buildし直しましょう。
$ docker-compose buide --no-cache
$ docker-compose up -d
これで環境は問題なくできるはずです。
##blackfireの使い方
計測したいページを開きます。(ローカル環境でも大丈夫です。)
拡張機能のblackfire profilerを起動し、profile!ボタンを元気よくクリックすれば計測してくれます。
結構待ちますが、終わったらView Call Graphをクリックで、ページ遷移し詳細がみれます。
##使ってみた感想
当環境が、Laravelを使っています。
サービスプロバイダーやミドルウェア、ビジネスロジック、Collection操作などの見直しに便利だったなぁと思いました。
SQLチューニングも行ったのですが、blackfireはあくまでロジックの精査に使用し、SQLに関してはdebugbarなどで確認しました。
日々の開発の中でなかなか最高パフォーマンスを出しながら開発するのも難しいですが、気づいたらめっちゃ遅い!とかなると思うので、タイミング見てパフォーマンスを気にしながら進めるのも重要だなと実感しました。