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
OPCache preloadの話 / opcache_preload
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryo Tomidokoro
February 26, 2020
Programming
340
3
Share
OPCache preloadの話 / opcache_preload
OPCache preloadの解説
Ryo Tomidokoro
February 26, 2020
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
980
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.6k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.9k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
14k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
15k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
270
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.7k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
57k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
Other Decks in Programming
See All in Programming
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
150
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
210
3Dシーンの圧縮
fadis
1
460
ECR拡張スキャンでSBOMを収集して サプライチェーン攻撃の影響調査を 爆速で終わらせてみた
akihisaikeda
2
210
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
390
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
410
Inspired By RubyKaigi (EN)
atzzcokek
0
400
分析エージェント精度向上における データアナリストの役割
oura_shoya
0
130
Zod v4 Codec でスキーマに型変換を埋め込む REST API 設計 #TSKaigi2026
ryutaro_yako
0
170
Talking to terminals (and how they talk back) (KotlinConf 2026)
jakewharton
PRO
1
160
AIエージェントの隔離技術の徹底比較
kawayu
0
440
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Practical Orchestrator
shlominoach
191
11k
Color Theory Basics | Prateek | Gurzu
gurzu
0
320
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
Navigating Weather and Climate Data
rabernat
0
200
Exploring anti-patterns in Rails
aemeredith
3
380
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
190
Between Models and Reality
mayunak
4
310
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
The agentic SEO stack - context over prompts
schlessera
0
790
A Soul's Torment
seathinner
6
2.9k
Google's AI Overviews - The New Search
badams
0
1k
Transcript
@hanhan1978 OPCache preloadの話 PHP勉強会 2020/2/26
本日のテーマ OPCache preloadを完全に 理解する。
OPCache preload とは?
PHP7.4から追加 https://wiki.php.net/rfc/preload
• OPCacheの設定項目 • 実行速度が速くなる
OPCacheのおさらい
PHPはスクリプト言語 • 実行時にコンパイル • コンパイル&実行を繰返す
例えば
PHPスクリプト実行の流れ
None
None
None
具体例1
ファイル構成
index.php
autoload.php
A.php
B.php
実行すると
実行の流れ
4回のコンパイル
• compile結果はキャッシュさ れる • 次回はキャッシュが使われる ので実行が早い
preloadが達成すること
• SAPI起動時にキャッシュ • 最初からコンパイル済みの状 態になる
具体例2
ファイル構成
preload.php
php.ini
実行すると
実行の流れ
3回のコンパイル
• autoloadが省略される • preload以外のファイルは opcache.validate_timestamp=0と 同じ挙動 • 直接のrequireはpreloadが活用さ れない
PHPソース v7.4.3
ext/opcache/ZendAccelarator.c - SAPI起動時に L4200 preload_load() - globalなデータ領域にpreloadしたクラス、ファイルの情報を登 録する - opcodes実行時のコンパイルに使われるのは、L1914
persistent_compile_file。これはpreloadの有無に依らない
Zend/zend_execute_API.c - L1419 zend_fetch_class_by_name が未解決のクラス名 に対してコールされる - zend_hash_findでコンパイル済みのクラスが発見されれ ば、それを使う(preload) -
それ以外は、autoloaderを使ってクラスの解決が行われて、 ファイルが見つかればコンパイルされる
preloadの現状
• 7.4.2でWindowsが対象外に • 内部クラス等、一部のケースでpreload が動作しない 7.4.3で修正? • opcache.preload_userの設定があっ ても一般ユーザでの起動時にsegfault ->
7.4.3で修正?
• https://bugs.php.net/search.php?cmd=displa y&package_name[]=opcache • redditのPHP系板 -> つい最近も7.4.3で Laravelが動いたなどの感動のお便りが報告さ れた 情報キャッチアップ
開発時の注意
• 内部の実行パスが少し変わるので、開 発(preload無)、本番(preload有)みた いな使い分けは危険 • 最低でも、phpunitはpreload有で実行 する • 出来れば、ファイル更新でphp-fpm再 起動とかが良さそう
phpunitで使うには これを設定しないと、コマンドライン実行時に opcacheが動かない。 preload専用の検証環境を用意してE2Eテストをし たとしても、エッジケースで動かない可能性もある ので、C1を通しでpreload設定で動かすようにしな いと怖い。
まとめ
• preloadはautoloadを削減 • ソースレベルでの実行パスが preload有無で若干変わる • 本番投入は、まだ待ったほうが...