Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPを少しでも早く_条件はあるよ_.pdf

 PHPを少しでも早く_条件はあるよ_.pdf

Ea3572f7de8fb9c26bacf448d55170f8?s=128

tsuyoshi nakamura

February 14, 2019
Tweet

More Decks by tsuyoshi nakamura

Other Decks in Technology

Transcript

  1. PHPを少しでも早く (条件はあるよ) 社内勉強会 @nakamura244

  2. いつものようにagendaなんかなく ざっくばらんにいきますよ

  3. 前々回の勉強会でXdebugの話ありまし が、Phpdbgで多分事が足りると思うので 注意です

  4. 前々回の勉強会で`1ms Journey`という話 がありました

  5. それを受けて、色々なポイントで高速化させ る部分があるとわかった

  6. けど1つ気になった。 サーバサイドまだまだ遅いだろコレ。

  7. API + frontendに移行していけばどんどん 気にならなくなっていくかもだけど、 やりきるまで何年必要なんだ?

  8. 現状よりも少しでも良い価値を少しでも早く ユーザに届けるのは間違いではない

  9. なので

  10. 現状多くの仕事をPHPでこなしている。その PHPを少しでも早く動かすにはどうしたら良 いか...ちょっと考えた Caution: - 言語のverupやcacheの飛び道具なし - オブジェクト指向やめるもなし - タイプヒントやめるもなし

  11. 観点を出して見る

  12. 効果が高い所を狙いたいので ボトルネックを探す

  13. 1

  14. ボトルネックを探す - Quick Profiler -

  15. この2つはみとくと良い ボトルネックを探す - Quick Profiler -

  16. - この画面表示するのにそんなにSQL発 行必要? - この画面表示するのにそんなメモリ必 要? ボトルネックを探す - Quick Profiler

    -
  17. explainの情報がみれる ボトルネックを探す - Quick Profiler -

  18. 2

  19. ボトルネックを探す - NewRelic -

  20. ボトルネックを探す - NewRelic - - 自分が担当してた時に何度か洗って主な 改善はdone状態 - 今は主にFWでの処理(classレベルま で)

    or 外部APIコールが相対的なボトル ネックとしてだいたい上がる
  21. もう手は出せないのか?? そんな事はない

  22. FWのcoreをいじらずにcoreの処理の最適 化をできる!! 独自クラスをオーバーライドする事ができ る!!

  23. なので

  24. NewRelic以上の詳しいプロファイリングを する

  25. example

  26. メソッドレベル、関数レベルでのボトルネック を探して、その core classに変わるclass を開発する benchとってokならFWのオーバーライド機 能使って新classが使われるようにする

  27. たぶんだけど、だいたい正規表現系 (preg系)が大体多く使われている部分は point。 最小限に留めたり、代替可能ロジックへ出 来るか等...

  28. 3

  29. 個人的な趣味の色が強いです。 カリカリのチューニング系です。 おそらく効果は薄いです。

  30. Opcodeレベルでの改善を考えます

  31. None
  32. https://github.com/sebastianbergmann/foal

  33. 2018年の末にしれっと新しいツールをリ リース `Foal`

  34. Tool to find lines eliminated by OpCache's bytecode optimizer

  35. opCacheを考慮した時に無 駄なコードを指摘してくれる ツール?かな

  36. 中身の実装を見ると vld(Vulcan Logic Disassembler)という extensionを使って実現してた

  37. ちょっとまて

  38. http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html

  39. http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html

  40. http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html Static Single Assignment 静的単一代入 Golang 1.7から Control Flow Graph

    制御フローグラフ コンパイル方法に関する情報が 見て取れる
  41. php7.1からphpdbgやvldを使わずに opcodeをdumpできる機能があるじゃない か。それ使えば良いのにと思ってしまった

  42. やっぱりphp7だけで実現できるな。きっと

  43. よし。ちょっと興味が湧いたのでついでに 作ってみた 今回のLTは実コード付きです

  44. https://github.com/nakamura244/phpfu

  45. Opcode dumpした時に`Unreachable`に 注目した。 通過していないコードかな。なので意味のな いコードとして解釈されたコードを表してい るっぽい。 (間違ってたらごめん)

  46. 使い方こんな感じ。 一応composerでinstallで きるようにしといた aというmethodでunreachableを検出 lines=[n-n]はmethod内の行数

  47. ちょっと脱線(時間あれば)

  48. PHP5系とPHP7系のopcodeの最適化の 違いに関して

  49. 多分時間なによね。また今度にします

  50. 以上

  51. ご静聴ありがとうございました