OPcache: การแคชไบต์โค้ด
เปิดใช้และปรับแต่ง OPcache เพื่อลดภาระจากการคอมไพล์สคริปต์ซ้ำ
OPcache: การแคชไบต์โค้ด เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
การทำงานปกติของ PHP
หากไม่มี OPcache ทุกคำขอจะทำให้ PHP อ่านไฟล์ .php จากดิสก์ แยกวิเคราะห์เป็น AST คอมไพล์เป็นโอปโค้ด (ไบต์โค้ด) แล้วจึงเรียกใช้โอปโค้ด
OPcache ทำอะไร
OPcache จัดเก็บโอปโค้ดที่คอมไพล์แล้วไว้ในหน่วยความจำร่วม สำหรับคำขอถัดไป PHP จะข้ามขั้นตอนการแยกวิเคราะห์และคอมไพล์ แล้วไปเรียกใช้โดยตรง
ผลกระทบต่อประสิทธิภาพ
โดยทั่วไป OPcache ช่วยเพิ่มปริมาณงานที่ประมวลผลได้ของแอปพลิเคชัน PHP 2-5 เท่าโดยไม่ต้องแก้ไขโค้ด
การเปิดใช้ OPcache
OPcache มาพร้อมกับ PHP 5.5 ขึ้นไป และเปิดใช้เป็นค่าเริ่มต้นในชุดแจกจ่ายจำนวนมาก ตรวจสอบได้ด้วย php -m | grep -i opcache
# php.ini:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0การตั้งค่าหลักของ OPcache
ปรับการตั้งค่าเหล่านี้สำหรับระบบใช้งานจริง:
# php.ini:
opcache.memory_consumption=256 ; MB of shared memory
opcache.interned_strings_buffer=16 ; MB for interned strings
opcache.max_accelerated_files=20000 ; max scripts to cache
opcache.validate_timestamps=0 ; disable for production!
opcache.revalidate_freq=0 ; how often to check timestampsvalidate_timestamps=0
ในระบบใช้งานจริง ให้ตั้งค่า validate_timestamps=0 เพื่อปิดการตรวจสอบระบบไฟล์ในทุกคำขอ PHP จะใช้โอปโค้ดที่แคชไว้เสมอ หลังนำโค้ดขึ้นระบบ ให้รีเซ็ตแคช
การรีเซ็ต OPcache
ล้างแคชหลังนำโค้ดเวอร์ชันใหม่ขึ้นระบบ
<?php
opcache_reset(); // from a PHP script
// Or restart PHP-FPM:
$ kill -USR2 $(cat /run/php-fpm.pid)opcache_get_status()
สอบถามสถิติของ OPcache ขณะทำงานเพื่อติดตามอัตราการพบแคชและการใช้หน่วยความจำ
<?php
$status = opcache_get_status();
echo "Hit rate: ".$status["opcache_statistics"]["opcache_hit_rate"]."%";การโหลดล่วงหน้า (PHP 7.4 ขึ้นไป)
การโหลดล่วงหน้าของ OPcache จะโหลดไฟล์เฟรมเวิร์กเข้าไปในหน่วยความจำร่วมเมื่อเซิร์ฟเวอร์เริ่มทำงาน จึงขจัดภาระการคอมไพล์แม้ในการเรียกครั้งแรกสำหรับคลาสหลัก
# php.ini:
opcache.preload=/srv/app/preload.php
opcache.preload_user=www-dataการคอมไพล์ JIT (PHP 8.0 ขึ้นไป)
PHP 8 เพิ่มการคอมไพล์ JIT (แบบทันเวลา) บน OPcache โดยแปลงโอปโค้ดเป็นโค้ดเครื่องโดยตรง ให้ประโยชน์สูงสุดกับงานที่ใช้ CPU หนัก แต่มีประโยชน์เพิ่มเพียงเล็กน้อยกับเว็บแอปทั่วไปที่รอการรับส่งข้อมูลเป็นหลัก
# php.ini:
opcache.jit_buffer_size=100M
opcache.jit=1255คลาสที่เปลี่ยนแปลงไม่ได้
OPcache สามารถใช้สตริงที่จัดเก็บร่วมกันและคำจำกัดความคลาสที่เปลี่ยนแปลงไม่ได้ร่วมกันระหว่างกระบวนการทำงาน ช่วยลดการใช้หน่วยความจำของแต่ละกระบวนการ
สรุป
เปิดใช้ OPcache ในระบบใช้งานจริงด้วย validate_timestamps=0 ล้างแคชหลังนำโค้ดขึ้นระบบด้วย opcache_reset() หรือรีสตาร์ต PHP-FPM ตรวจสอบอัตราการพบแคชด้วย opcache_get_status()
ตรวจสอบความเข้าใจอย่างรวดเร็ว
การตั้งค่าใดใน php.ini ที่ควรเป็น 0 ในระบบใช้งานจริงเพื่อให้ OPcache มีประสิทธิภาพสูงสุด
คำถามที่พบบ่อย
บทเรียน “OPcache: การแคชไบต์โค้ด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “OPcache: การแคชไบต์โค้ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “OPcache: การแคชไบต์โค้ด”
เปิดใช้และปรับแต่ง OPcache เพื่อลดภาระจากการคอมไพล์สคริปต์ซ้ำ คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “OPcache: การแคชไบต์โค้ด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำโปรไฟล์ PHP ด้วย Xdebug
- OPcache: การแคชไบต์โค้ด
- การปรับปรุงประสิทธิภาพคำสืบค้นฐานข้อมูล
- การจัดการหน่วยความจำและเคล็ดลับด้านประสิทธิภาพ