Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPを少しでも早く_条件はあるよ_.pdf
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tsuyoshi nakamura
February 14, 2019
Technology
0
82
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
75
About_Resilience.pdf
tsuyoshi
1
85
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.4k
スタートアップエンジニアの役割
tsuyoshi
0
530
古株のvalueの出し方
tsuyoshi
0
4.2k
Other Decks in Technology
See All in Technology
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
120
Agile Leadership Summit Keynote 2026
m_seki
1
480
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
130
GSIが複数キー対応したことで、俺達はいったい何が嬉しいのか?
smt7174
3
140
2026年はチャンキングを極める!
shibuiwilliam
9
1.9k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
Meshy Proプラン課金した
henjin0
0
250
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
200
What happened to RubyGems and what can we learn?
mikemcquaid
0
250
Webhook best practices for rock solid and resilient deployments
glaforge
1
270
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
350
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
290
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
WENDY [Excerpt]
tessaabrams
9
36k
The SEO identity crisis: Don't let AI make you average
varn
0
64
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
The untapped power of vector embeddings
frankvandijk
1
1.6k
Making Projects Easy
brettharned
120
6.6k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
96
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
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の最適化の 違いに関して
多分時間なによね。また今度にします
以上
ご静聴ありがとうございました