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
0
39
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi nakamura
February 14, 2019
Tweet
Share
More Decks by tsuyoshi nakamura
See All by tsuyoshi nakamura
社内の勉強会で発表した_output_一部抜粋版_.pdf
tsuyoshi
0
400
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
1.7k
PHPを少し深堀るよ.pdf
tsuyoshi
0
280
Reactive_Manifesto.pdf
tsuyoshi
0
36
About_Resilience.pdf
tsuyoshi
1
55
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.1k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.2k
スタートアップエンジニアの役割
tsuyoshi
0
440
古株のvalueの出し方
tsuyoshi
0
4k
Other Decks in Technology
See All in Technology
AOAI Dev Day LLMシステム開発 Tips集
hirosatogamo
15
3.7k
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-for-ddd-and-kotlin-implement-pattern
urmot
4
390
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
320
クラウド利用者の「責任」をどう果たす?AWSセキュリティ対策のススメ #AWSSummit
hiashisan
0
270
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
Amazon FSx for NetApp ONTAPのパフォーマンスチューニング要素をまとめてみた #cm_odyssey #devio2024
non97
0
220
AOAI Dev Day - Opening Session
yoshidashingo
2
440
Classmethod Odyssey 登壇資料
yamahiro
0
390
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~
lycorptech_jp
PRO
3
2.9k
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
LLMアプリケーションの評価の実践と課題 ~PharmaXにおける今後の展望~
pharma_x_tech
2
160
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
224
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Raft: Consensus for Rubyists
vanstee
134
6.5k
We Have a Design System, Now What?
morganepeng
46
7k
Docker and Python
trallard
37
2.9k
Building a Scalable Design System with Sketch
lauravandoore
458
32k
Navigating Team Friction
lara
181
13k
Designing Experiences People Love
moore
136
23k
A Tale of Four Properties
chriscoyier
155
22k
Building Applications with DynamoDB
mza
89
5.8k
Bash Introduction
62gerente
607
210k
Teambox: Starting and Learning
jrom
130
8.6k
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の最適化の 違いに関して
多分時間なによね。また今度にします
以上
ご静聴ありがとうございました