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
tsuyoshi nakamura
February 14, 2019
Technology
87
0
Share
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi nakamura
February 14, 2019
More Decks by tsuyoshi nakamura
See All by tsuyoshi nakamura
社内の勉強会で発表した_output_一部抜粋版_.pdf
tsuyoshi
0
500
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
1.9k
PHPを少し深堀るよ.pdf
tsuyoshi
0
380
Reactive_Manifesto.pdf
tsuyoshi
0
81
About_Resilience.pdf
tsuyoshi
1
93
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.3k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.4k
スタートアップエンジニアの役割
tsuyoshi
0
540
古株のvalueの出し方
tsuyoshi
0
4.2k
Other Decks in Technology
See All in Technology
小説執筆のハーネスエンジニアリング
yoshitetsu
0
810
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
79k
AI時代のガードレールとしてのAPIガバナンス
nagix
0
310
需要創出(Chatwork)×供給(BPaaS) フライホイールとMoat 実行能力の最適配置とAI戦略
kubell_hr
0
990
色を視る
yuzneri
0
170
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
140
Standards et agents IA : un tour d’horizon de MCP, A2A, ADK et plus encore
glaforge
0
210
"おまじない"を卒業する ボイラープレート再入門
shunsuke_1b
1
110
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
150
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.5k
Anthropic「Long-running a gents」をGeminiで再現してみた
tkikuchi
0
590
バイブコーディングで3倍早く⚪⚪を作ってみた
samakada
0
180
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
300
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
260
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
110
The Curious Case for Waylosing
cassininazir
0
320
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
520
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
140
The Cult of Friendly URLs
andyhume
79
6.8k
Believing is Seeing
oripsolob
1
120
Tell your own story through comics
letsgokoyo
1
900
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の最適化の 違いに関して
多分時間なによね。また今度にします
以上
ご静聴ありがとうございました