Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPを少しでも早く_条件はあるよ_.pdf
Search
tsuyoshi nakamura
February 14, 2019
Technology
0
79
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi nakamura
February 14, 2019
Tweet
Share
More Decks by tsuyoshi nakamura
See All by tsuyoshi nakamura
社内の勉強会で発表した_output_一部抜粋版_.pdf
tsuyoshi
0
480
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
1.9k
PHPを少し深堀るよ.pdf
tsuyoshi
0
370
Reactive_Manifesto.pdf
tsuyoshi
0
70
About_Resilience.pdf
tsuyoshi
1
81
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.2k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.4k
スタートアップエンジニアの役割
tsuyoshi
0
520
古株のvalueの出し方
tsuyoshi
0
4.1k
Other Decks in Technology
See All in Technology
MLflowダイエット大作戦
lycorptech_jp
PRO
1
150
日本Rubyの会: これまでとこれから
snoozer05
PRO
4
200
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
260
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
500
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
500
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
340
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
150
2025-12-18_AI駆動開発推進プロジェクト運営について / AIDD-Promotion project management
yayoi_dd
0
130
障害対応訓練、その前に
coconala_engineer
0
130
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
290
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
920
SREには開発組織全体で向き合う
koh_naga
0
390
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
0
88
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
2
3.8k
Design in an AI World
tapps
0
91
Prompt Engineering for Job Search
mfonobong
0
110
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
680
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
87
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
240
30 Presentation Tips
portentint
PRO
1
160
Tell your own story through comics
letsgokoyo
0
740
Transcript
PHPを少しでも早く (条件はあるよ) 社内勉強会 @nakamura244
いつものようにagendaなんかなく ざっくばらんにいきますよ
前々回の勉強会でXdebugの話ありまし が、Phpdbgで多分事が足りると思うので 注意です
前々回の勉強会で`1ms Journey`という話 がありました
それを受けて、色々なポイントで高速化させ る部分があるとわかった
けど1つ気になった。 サーバサイドまだまだ遅いだろコレ。
API + frontendに移行していけばどんどん 気にならなくなっていくかもだけど、 やりきるまで何年必要なんだ?
現状よりも少しでも良い価値を少しでも早く ユーザに届けるのは間違いではない
なので
現状多くの仕事をPHPでこなしている。その PHPを少しでも早く動かすにはどうしたら良 いか...ちょっと考えた Caution: - 言語のverupやcacheの飛び道具なし - オブジェクト指向やめるもなし - タイプヒントやめるもなし
観点を出して見る
効果が高い所を狙いたいので ボトルネックを探す
1
ボトルネックを探す - Quick Profiler -
この2つはみとくと良い ボトルネックを探す - Quick Profiler -
- この画面表示するのにそんなにSQL発 行必要? - この画面表示するのにそんなメモリ必 要? ボトルネックを探す - Quick Profiler
-
explainの情報がみれる ボトルネックを探す - Quick Profiler -
2
ボトルネックを探す - NewRelic -
ボトルネックを探す - NewRelic - - 自分が担当してた時に何度か洗って主な 改善はdone状態 - 今は主にFWでの処理(classレベルま で)
or 外部APIコールが相対的なボトル ネックとしてだいたい上がる
もう手は出せないのか?? そんな事はない
FWのcoreをいじらずにcoreの処理の最適 化をできる!! 独自クラスをオーバーライドする事ができ る!!
なので
NewRelic以上の詳しいプロファイリングを する
example
メソッドレベル、関数レベルでのボトルネック を探して、その core classに変わるclass を開発する benchとってokならFWのオーバーライド機 能使って新classが使われるようにする
たぶんだけど、だいたい正規表現系 (preg系)が大体多く使われている部分は point。 最小限に留めたり、代替可能ロジックへ出 来るか等...
3
個人的な趣味の色が強いです。 カリカリのチューニング系です。 おそらく効果は薄いです。
Opcodeレベルでの改善を考えます
None
https://github.com/sebastianbergmann/foal
2018年の末にしれっと新しいツールをリ リース `Foal`
Tool to find lines eliminated by OpCache's bytecode optimizer
opCacheを考慮した時に無 駄なコードを指摘してくれる ツール?かな
中身の実装を見ると vld(Vulcan Logic Disassembler)という extensionを使って実現してた
ちょっとまて
http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html
http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html
http://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html Static Single Assignment 静的単一代入 Golang 1.7から Control Flow Graph
制御フローグラフ コンパイル方法に関する情報が 見て取れる
php7.1からphpdbgやvldを使わずに opcodeをdumpできる機能があるじゃない か。それ使えば良いのにと思ってしまった
やっぱりphp7だけで実現できるな。きっと
よし。ちょっと興味が湧いたのでついでに 作ってみた 今回のLTは実コード付きです
https://github.com/nakamura244/phpfu
Opcode dumpした時に`Unreachable`に 注目した。 通過していないコードかな。なので意味のな いコードとして解釈されたコードを表してい るっぽい。 (間違ってたらごめん)
使い方こんな感じ。 一応composerでinstallで きるようにしといた aというmethodでunreachableを検出 lines=[n-n]はmethod内の行数
ちょっと脱線(時間あれば)
PHP5系とPHP7系のopcodeの最適化の 違いに関して
多分時間なによね。また今度にします
以上
ご静聴ありがとうございました