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
73
PHPを少しでも早く_条件はあるよ_.pdf
tsuyoshi nakamura
February 14, 2019
Tweet
Share
More Decks by tsuyoshi nakamura
See All by tsuyoshi nakamura
社内の勉強会で発表した_output_一部抜粋版_.pdf
tsuyoshi
0
470
スタートアップ6年目のレビュー文化.pdf
tsuyoshi
1
1.9k
PHPを少し深堀るよ.pdf
tsuyoshi
0
360
Reactive_Manifesto.pdf
tsuyoshi
0
63
About_Resilience.pdf
tsuyoshi
1
75
エンジニアの循環ってgood_or_bad_.pdf
tsuyoshi
0
1.2k
スタートアップしてからの失敗の数々
tsuyoshi
0
2.4k
スタートアップエンジニアの役割
tsuyoshi
0
510
古株のvalueの出し方
tsuyoshi
0
4.1k
Other Decks in Technology
See All in Technology
そのWAFのブロック、どう活かす? サービスを守るための実践的多層防御と思考法 / WAF blocks defense decision
kaminashi
0
140
E2Eテスト設計_自動化のリアル___Playwrightでの実践とMCPの試み__AIによるテスト観点作成_.pdf
findy_eventslides
1
570
ユーザーの声とAI検証で進める、プロダクトディスカバリー
sansantech
PRO
1
110
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
140
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9.1k
社内報はAIにやらせよう / Let AI handle the company newsletter
saka2jp
8
1.3k
成長自己責任時代のあるきかた/How to navigate the era of personal responsibility for growth
kwappa
4
300
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
150
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
小学4年生夏休みの自由研究「ぼくと Copilot エージェント」
taichinakamura
0
580
SREとソフトウェア開発者の合同チームはどのようにS3のコストを削減したか?
muziyoshiz
1
210
PLaMo2シリーズのvLLM実装 / PFN LLM セミナー
pfn
PRO
2
1.1k
Featured
See All Featured
Navigating Team Friction
lara
189
15k
A better future with KSS
kneath
239
18k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Six Lessons from altMBA
skipperchong
28
4k
Optimizing for Happiness
mojombo
379
70k
Thoughts on Productivity
jonyablonski
70
4.9k
Building an army of robots
kneath
306
46k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
900
Code Review Best Practice
trishagee
72
19k
Git: the NoSQL Database
bkeepers
PRO
431
66k
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の最適化の 違いに関して
多分時間なによね。また今度にします
以上
ご静聴ありがとうございました