ถ้าเว็บ PHP ของคุณรู้สึกช้าทั้งที่เลือก Hosting สเปกดีแล้ว หนึ่งในสาเหตุที่พบบ่อยที่สุดคือ PHP ต้องทำงานซ้ำซ้อนกับโค้ดทุก Request โดยไม่จำเป็น และตัวช่วยที่ได้ผลเร็วที่สุด ฟรี ไม่ต้องแก้โค้ดแม้แต่บรรทัดเดียว คือ PHP OPcache — ส่วนขยายที่ฝังมากับ PHP ตั้งแต่เวอร์ชัน 5.5 แต่หลายคนยังไม่รู้ว่ามีอยู่
AsiaGB เปิด PHP OPcache บน Shared Hosting ทุกเครื่องโดยค่าเริ่มต้น
ลูกค้า AsiaGB ทุกแพ็กเกจได้รับ OPcache พร้อมใช้งานทันทีโดยไม่ต้องเปิดเองหรือจ่ายเพิ่ม เซิร์ฟเวอร์ทุกเครื่องตั้งค่า OPcache ให้เหมาะสมกับ Shared Hosting ไว้ล่วงหน้าแล้ว ลูกค้าสามารถปรับค่าเพิ่มเติมผ่าน DirectAdmin ได้เองตามต้องการ
PHP OPcache คืออะไร และทำงานอย่างไร
ก่อนอธิบาย OPcache ต้องเข้าใจก่อนว่า PHP ปกติทำงานอย่างไรเมื่อมี Request เข้ามา ทุกครั้งที่เบราว์เซอร์ขอหน้าเว็บ PHP จะทำขั้นตอนเหล่านี้กับทุกไฟล์ .php ที่เกี่ยวข้อง:
- อ่านไฟล์จากดิสก์ (Read) — PHP เปิดไฟล์
.phpแต่ละไฟล์จากพื้นที่เก็บข้อมูล ซึ่งใช้เวลาพอสมควรโดยเฉพาะเว็บที่มีไฟล์จำนวนมาก - แปลงเป็น Tokens (Tokenize / Lex) — PHP Engine อ่านซอร์สโค้ดและแบ่งออกเป็นหน่วยย่อยที่เรียกว่า Token เช่น ตัวแปร ฟังก์ชัน ตัวดำเนินการ
- Parse และสร้าง AST (Abstract Syntax Tree) — Token ถูกนำมาสร้างเป็นโครงสร้างต้นไม้เพื่อแสดงความหมายของโค้ด
- คอมไพล์เป็น Opcode — AST ถูกแปลงเป็นชุดคำสั่งระดับต่ำที่เรียกว่า Opcode ซึ่ง PHP Engine (Zend Engine) เข้าใจและรันได้โดยตรง
- รัน Opcode — Zend Engine ประมวลผล Opcode และส่งผลลัพธ์ออกมาเป็น HTML ที่ส่งกลับไปยังเบราว์เซอร์
ปัญหาคือขั้นตอน 1-4 ทั้งหมดนี้เกิดขึ้น ซ้ำทุก Request ทุกครั้ง แม้โค้ดจะไม่ได้เปลี่ยนเลย ลองนึกภาพว่า WordPress โหลดไฟล์ PHP ประมาณ 300-500 ไฟล์ต่อหนึ่งหน้า เว็บที่มีคนเข้า 1,000 ครั้งต่อวันหมายความว่า PHP ต้องอ่านและคอมไพล์ไฟล์เดิมซ้ำๆ อาจถึงหลักล้านครั้ง — นั่นคือการทำงานซ้ำซ้อนที่สิ้นเปลืองทรัพยากรโดยเปล่าประโยชน์
OPcache แก้ปัญหานี้ โดยเก็บ Opcode ที่คอมไพล์เสร็จแล้วจากขั้นตอนที่ 4 ไว้ใน Shared Memory (หน่วยความจำร่วม) ซึ่งทุก PHP Process บนเซิร์ฟเวอร์เข้าถึงได้ เมื่อ Request ถัดไปเข้ามาขอไฟล์เดิม PHP จะข้ามขั้นตอน 1-4 ทั้งหมดและดึง Opcode จาก RAM มาใช้ทันที ไม่ต้องอ่านดิสก์ ไม่ต้องคอมไพล์ใหม่ — ลดเวลาส่วนนั้นลงได้หลายเท่า
สรุปหลักการ: OPcache = Cache ของ Opcode ใน RAM — PHP ข้ามการอ่านไฟล์และคอมไพล์ซ้ำ ผลลัพธ์คือ TTFB (Time to First Byte) ลดลง CPU ใช้น้อยลง เซิร์ฟเวอร์รองรับคนพร้อมกันได้มากขึ้น
ตัวเลขประสิทธิภาพจริง: OPcache เร็วขึ้นแค่ไหน
ผลลัพธ์จะแตกต่างกันไปตามลักษณะเว็บ แต่โดยทั่วไปที่พบในการทดสอบบน PHP Applications ทั่วไป:
เว็บที่เห็นผลชัดเจนที่สุดคือเว็บที่มีไฟล์ PHP จำนวนมากต่อหนึ่ง Request อย่าง WordPress ที่มีปลั๊กอินหลายตัว, WooCommerce, Laravel พร้อม Vendor Libraries หรือ Magento ที่มีไฟล์หลายพันไฟล์ ในทางกลับกัน เว็บที่มีไฟล์ PHP น้อยไฟล์หรือใช้ Page Cache เต็มรูปแบบอยู่แล้วอาจเห็นผลต่างเล็กน้อยกว่า
สิ่งที่ OPcache ไม่ได้เร่ง
สำคัญมากที่ต้องเข้าใจข้อจำกัด OPcache เร่งเฉพาะ การประมวลผลโค้ด PHP เท่านั้น ถ้าเว็บช้าจากสาเหตุเหล่านี้ OPcache ช่วยไม่ได้:
- Query ฐานข้อมูลที่ช้า — ต้องแก้ด้วย Index, Query Optimization หรือ Object Cache (Redis)
- การเรียก External API — ขึ้นกับ Network Latency และความเร็วของ Server ปลายทาง
- ไฟล์รูปภาพขนาดใหญ่ — ต้องบีบอัด Optimize Image แยกต่างหาก
- JavaScript/CSS ที่หนัก — ส่วนนี้อยู่ฝั่ง Frontend ต้องแก้ด้วย Minify/Bundle
- Network เองของผู้ใช้ — ความเร็ว ISP หรือ Latency จากระยะทาง CDN ช่วยได้
AsiaGB: OPcache เปิดบน Shared Hosting ทุกเครื่องทุกแพ็กเกจ
สิ่งที่ทำให้ Hosting ของ AsiaGB แตกต่างจากผู้ให้บริการบางเจ้าคือ AsiaGB เปิด PHP OPcache บน Shared Hosting ทุกเครื่องโดยไม่มีข้อแม้ ทั้งแพ็กเกจราคาต้นจนถึงแพ็กเกจสูงสุด เซิร์ฟเวอร์ทุกตัวที่รัน Shared Hosting ของ AsiaGB ได้ถูกตั้งค่า OPcache ไว้ที่ระดับ System ล่วงหน้าแล้ว
เหตุผลที่ AsiaGB ตัดสินใจเปิด OPcache ทุกเครื่องไม่ใช่แค่เพราะมีประโยชน์กับลูกค้า แต่เพราะ OPcache ช่วยลดภาระ CPU ของเซิร์ฟเวอร์โดยรวมด้วย ซึ่งหมายความว่าทุกเว็บบนเซิร์ฟเวอร์เดียวกันได้ทรัพยากรที่ดีขึ้น เป็น Win-Win ทั้งฝั่งลูกค้าและฝั่งเซิร์ฟเวอร์
สำหรับลูกค้า AsiaGB: คุณได้ OPcache ทันทีตั้งแต่วันแรกที่ซื้อ Hosting โดยไม่ต้องตั้งค่าใดเพิ่มเติม เว็บ WordPress, Laravel, CodeIgniter หรือ PHP ทุกชนิดของคุณใช้ OPcache อยู่แล้ว คุณสามารถปรับแต่งค่า OPcache เพิ่มเติมได้เองผ่านหน้า DirectAdmin ถ้าต้องการ
ค่า OPcache ที่ AsiaGB ตั้งไว้ระดับ System
AsiaGB ตั้งค่า OPcache หลักในระดับ System ให้เหมาะสมกับสภาพแวดล้อม Shared Hosting โดยรวม ลูกค้าสามารถ Override ค่าบางส่วนผ่าน user.ini หรือหน้า PHP Options ใน DirectAdmin ได้เพิ่มเติม ค่าที่แนะนำสำหรับการ Override:
opcache.max_accelerated_files— เพิ่มถ้าเว็บมีปลั๊กอิน WordPress เยอะมากๆopcache.revalidate_freq— ปรับตามความถี่ที่อัปเดตโค้ดopcache.validate_timestamps— ตั้ง 0 บน Production ที่นิ่งแล้ว เพื่อความเร็วสูงสุด
วิธีตรวจสอบว่า OPcache ทำงานบนเว็บของคุณ
แม้ AsiaGB เปิด OPcache ไว้แล้ว แต่คุณควรตรวจยืนยันเองเพื่อความมั่นใจ มีหลายวิธี:
วิธีที่ 1: ใช้ phpinfo()
สร้างไฟล์ info.php ที่ public folder ของเว็บ:
<?php phpinfo();
เปิดดูในเบราว์เซอร์แล้วกด Ctrl+F ค้นหา "Zend OPcache" ถ้าพบส่วนนี้และ opcache.enable เป็น On แสดงว่า OPcache ทำงานอยู่ ดูค่า "Cached scripts" เพิ่มเติมเพื่อให้รู้ว่ามีไฟล์ถูก Cache แล้วกี่ไฟล์
สำคัญ: หลังตรวจแล้วต้องลบไฟล์ info.php ทิ้งทันที เพราะไฟล์นี้เปิดเผยข้อมูลเซิร์ฟเวอร์และการตั้งค่า PHP ที่อาจถูกใช้โดยผู้ไม่หวังดี
วิธีที่ 2: ตรวจจาก PHP Code
สร้างไฟล์ตรวจสอบแบบสั้นๆ แล้วลบทิ้งหลังใช้:
<?php
if (function_exists('opcache_get_status')) {
$status = opcache_get_status();
echo "OPcache enabled: " . ($status['opcache_enabled'] ? 'YES' : 'NO') . "\n";
echo "Cached scripts: " . $status['opcache_statistics']['num_cached_scripts'] . "\n";
echo "Memory used: " . round($status['memory_usage']['used_memory'] / 1024 / 1024, 2) . " MB\n";
echo "Memory free: " . round($status['memory_usage']['free_memory'] / 1024 / 1024, 2) . " MB\n";
} else {
echo "OPcache not available";
}
วิธีที่ 3: ใช้ Plugin WordPress
สำหรับเว็บ WordPress ปลั๊กอิน LiteSpeed Cache, W3 Total Cache หรือ Query Monitor มักแสดงสถานะ OPcache ในหน้า Dashboard พร้อมปุ่ม Flush Cache ที่สะดวก ไม่ต้องเขียนโค้ดเอง
วิธีที่ 4: ตรวจผ่าน DirectAdmin
เข้า DirectAdmin › Select PHP Version › ดูรายการ Extensions ถ้า opcache มีเครื่องหมายติ๊กอยู่แสดงว่าเปิดอยู่สำหรับ PHP Version นั้น
วิธีเปิดหรือปรับ OPcache บน DirectAdmin (ถ้าต้องการ Override)
แม้ AsiaGB เปิด OPcache ระดับ System ให้แล้ว แต่ถ้าคุณต้องการปรับค่าให้เหมาะกับเว็บของตัวเองโดยเฉพาะ ทำได้ผ่าน DirectAdmin โดยไม่ต้องมีสิทธิ์ Root:
- เข้า DirectAdmin — ไปที่ URL ของ DirectAdmin ปกติคือ
yourdomain.com:2222แล้วล็อกอินด้วยบัญชีของคุณ - เลือก PHP Version — หาเมนู Select PHP Version หรือ PHP Selector ในส่วน Advanced Features หรือ Extra Features
- ตรวจสอบ Extensions — ในรายการ Extensions ให้ดูว่า
opcacheมีติ๊กอยู่ ถ้าไม่มีให้ติ๊กเปิดแล้วกด Save (แต่สำหรับ AsiaGB ปกติเปิดไว้แล้ว) - เข้า PHP Options/Settings — คลิกที่ Options หรือ PHP Settings เพื่อปรับค่า ini ที่ต้องการ Override
- บันทึก — คลิก Apply/Save ค่าจะมีผลทันทีสำหรับ Request ใหม่ที่เข้ามา
ทางเลือก: ใช้ไฟล์ .user.ini — สร้างไฟล์ .user.ini ในโฟลเดอร์หลักของเว็บ (public_html) แล้วใส่ค่า opcache ที่ต้องการ Override ได้เลย ไม่ต้องเข้า DirectAdmin ทุกครั้ง ค่าจะมีผลภายในเวลาไม่เกิน 5 นาที (ตามค่า user_ini.cache_ttl)
ค่า OPcache ที่แนะนำสำหรับแต่ละกรณีใช้งาน
ค่าที่เหมาะสมต่างกันตามลักษณะเว็บ ด้านล่างคือค่าแนะนำตามประเภทการใช้งาน:
เว็บทั่วไป / WordPress (แนะนำสำหรับส่วนใหญ่)
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.validate_timestamps=1 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
WordPress + WooCommerce หรือ Site ขนาดใหญ่
opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.revalidate_freq=120 opcache.validate_timestamps=1 opcache.interned_strings_buffer=32 opcache.max_wasted_percentage=5
Laravel / Symfony (Production ที่นิ่งแล้ว)
opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.revalidate_freq=0 opcache.validate_timestamps=0 opcache.interned_strings_buffer=32 opcache.save_comments=1
สำคัญ: ค่า validate_timestamps=0 และ revalidate_freq=0 หมายความว่า OPcache จะไม่ตรวจว่าไฟล์เปลี่ยนหรือไม่เลย ต้อง Clear Cache ด้วยตัวเองทุกครั้งหลัง Deploy เช่น รัน php artisan opcache:clear หรือ opcache_reset()
| ค่า ini | ความหมาย | คำแนะนำ |
|---|---|---|
opcache.enable | เปิด/ปิด OPcache | 1 เสมอบน Production |
memory_consumption | RAM (MB) สำหรับเก็บ Opcode Cache | 128 ทั่วไป, 256 สำหรับ WooCommerce/Laravel |
max_accelerated_files | จำนวนไฟล์สูงสุดที่ Cache ได้ | 10000 ทั่วไป, เพิ่มถ้ามีปลั๊กอินเยอะ |
revalidate_freq | ทุกกี่วินาทีเช็กว่าไฟล์เปลี่ยน | 60 ระหว่างพัฒนา, 0 บน Production นิ่ง |
validate_timestamps | เช็ก Timestamp ไฟล์ทุก Request หรือไม่ | 1 ระหว่างพัฒนา, 0 บน Production นิ่ง |
interned_strings_buffer | RAM (MB) สำหรับ String ที่ซ้ำกันใน Code | 16 ทั่วไป, 32 สำหรับเว็บใหญ่ |
max_wasted_percentage | % ที่ยอมให้ Memory ตกค้างก่อน Restart | 5 (ค่าเริ่มต้น) |
save_comments | เก็บ Comment ใน Code ไว้ใน Cache หรือไม่ | 1 ถ้าใช้ Doctrine Annotations / PHP 8 Attributes |
fast_shutdown | ปิด Process เร็วขึ้นโดยปล่อย Memory คืนเป็น Block | 1 บน PHP 7.x (PHP 8.x เปิดอัตโนมัติ) |
OPcache JIT: ก้าวต่อไปใน PHP 8.0+
PHP 8.0 เพิ่มฟีเจอร์ใหม่ที่ทำงานควบคู่กับ OPcache ชื่อว่า JIT (Just-In-Time Compiler) ความแตกต่างระหว่าง OPcache ปกติและ OPcache+JIT คือ:
- OPcache ปกติ: เก็บ Opcode ไว้ใน RAM, Zend Engine อ่าน Opcode แล้ว ตีความ ทีละคำสั่ง (Interpretation)
- OPcache + JIT: แปลง Opcode เป็น Machine Code (ภาษาเครื่องโดยตรง) แล้วเก็บไว้ ครั้งต่อไปที่รัน CPU ประมวลผล Machine Code ตรงๆ โดยไม่ต้องผ่าน Interpreter อีกชั้น
การตั้งค่า JIT ใน PHP 8.x ทำผ่าน OPcache:
opcache.jit=on opcache.jit_buffer_size=64M
JIT เหมาะกับงานที่ใช้ CPU เข้มข้น เช่น Image Processing, Math-Heavy Computation, หรืองาน CLI แต่สำหรับเว็บ CRUD ทั่วไปที่คอขวดอยู่ที่ Database มักไม่เห็นผลต่างชัดเจน PHP Documentation แนะนำให้ทดสอบในสภาพแวดล้อมจริงก่อนเปิด JIT บน Production
หมายเหตุ JIT: AsiaGB รองรับ PHP 8.0–8.3 บน Shared Hosting ทุกแพ็กเกจ ลูกค้าสามารถสลับ PHP Version และเปิด JIT ผ่าน DirectAdmin ได้เอง ทีม Support พร้อมช่วยปรับค่าหากต้องการ
เมื่อไหร่ควรล้าง OPcache Cache
OPcache เก็บ Opcode ไว้จนกว่าจะถึงเงื่อนไขบางอย่าง ต้องทราบว่าควรล้าง Cache เมื่อไหร่:
กรณีที่ต้องล้าง Cache ทันที
- อัปเดต WordPress Core / ปลั๊กอิน / ธีม — ไฟล์ PHP เปลี่ยน OPcache อาจยังเก็บ Version เก่า
- Deploy โค้ดใหม่ (Laravel, Custom PHP) — โดยเฉพาะถ้าใช้
validate_timestamps=0 - แก้ไขไฟล์ PHP โดยตรง — FTP/SSH แก้ไฟล์โดยตรง ควร Flush หลังแก้
- ติดตั้ง/ถอดปลั๊กอินที่มี Caching — อาจทำให้เกิด Conflict กับ OPcache
วิธีล้าง OPcache
| วิธี | คำสั่ง / ขั้นตอน | เหมาะกับ |
|---|---|---|
| PHP Function | opcache_reset(); | เรียกจาก Script ที่ Authentication แล้ว |
| WordPress Plugin | LiteSpeed Cache › Flush OPcache | User ที่ไม่ถนัดโค้ด |
| SSH | php -r "opcache_reset();" | Developer ที่มี SSH Access |
| Restart PHP-FPM | DirectAdmin › Restart Services | กรณี Emergency หรือ Full Reset |
| อัตโนมัติ | ตั้ง revalidate_freq=60 + validate_timestamps=1 | เว็บที่อัปเดตบ่อยและยอมรับ Lag 60 วินาที |
การ Monitor สถานะ OPcache
บน Production ควรติดตาม OPcache ว่าทำงานได้ดีอยู่หรือเปล่า โดยเฉพาะ 2 ค่าสำคัญ:
1. OPcache Memory Usage
ถ้า Memory ที่ใช้เกิน 80% ของที่จัดสรรไว้ (memory_consumption) OPcache จะเริ่มล้างไฟล์เก่าออกบ่อยขึ้น ทำให้ต้องคอมไพล์ใหม่บ่อย ลดประสิทธิภาพลง แก้โดยเพิ่ม memory_consumption หรือลด max_accelerated_files
2. Cache Hit Rate
ตรวจจาก opcache_get_status() ดูค่า opcache_hit_rate — ถ้าต่ำกว่า 90% แสดงว่ามีไฟล์ถูก Evict ออกบ่อยเกินไป ควรเพิ่ม Memory หรือเพิ่ม max_accelerated_files
<?php
$status = opcache_get_status();
$stats = $status['opcache_statistics'];
$hitRate = round($stats['opcache_hit_rate'], 2);
$usedMB = round($status['memory_usage']['used_memory'] / 1024 / 1024, 2);
$freeMB = round($status['memory_usage']['free_memory'] / 1024 / 1024, 2);
echo "Hit Rate: {$hitRate}%\n";
echo "Memory Used: {$usedMB} MB / Free: {$freeMB} MB\n";
echo "Cached Scripts: {$stats['num_cached_scripts']}\n";
OPcache เทียบกับ Cache ชั้นอื่น: ทำงานคนละชั้น ไม่ใช่คู่แข่ง
หลายคนสับสนว่า OPcache แทนที่ Cache ประเภทอื่นได้หรือเปล่า คำตอบคือไม่ได้ แต่ละชนิดทำงานคนละชั้นและเสริมกัน:
| ประเภท Cache | แคชอะไร | เร็วขึ้นที่ไหน | ตัวอย่าง |
|---|---|---|---|
| OPcache | Opcode PHP ที่คอมไพล์แล้ว | PHP Execution Speed | Zend OPcache (Built-in) |
| Object Cache | ผลลัพธ์ Query DB / API Calls | Database Round-trips | Redis, Memcached |
| Page Cache | HTML สำเร็จรูปทั้งหน้า | ข้าม PHP ทั้งหมด (เร็วที่สุด) | LiteSpeed Cache, W3 Total Cache |
| CDN / Edge Cache | Static Files (CSS/JS/Image) | ลด Latency ด้วย Edge Node ใกล้ User | Cloudflare, BunnyCDN |
| Browser Cache | ไฟล์ Static บน Client | ไม่ต้อง Download ซ้ำ | Cache-Control Headers |
Stack ที่ดีที่สุดสำหรับ WordPress Performance คือ OPcache + Object Cache (Redis) + Page Cache (LiteSpeed Cache หรือ W3TC) + CDN ทำงานพร้อมกัน OPcache เป็นชั้นแรกที่ควรมีเสมอเพราะฟรีและไม่ซับซ้อน
การแก้ปัญหาที่พบบ่อยกับ OPcache
ปัญหา: แก้ไขโค้ดแล้วเว็บไม่เปลี่ยน
สาเหตุ: OPcache ยังเสิร์ฟ Opcode เก่า แก้โดยล้าง Cache ด้วย opcache_reset() หรือรอจน revalidate_freq ครบรอบ ถ้าพบบ่อยให้เพิ่ม validate_timestamps=1 ระหว่างพัฒนา
ปัญหา: เว็บช้าลงหลังเปิด OPcache
ไม่ค่อยเกิด แต่อาจเกิดเมื่อ memory_consumption น้อยเกินไปจนมีการ Evict ถี่เกินไป ตรวจ Hit Rate ถ้าต่ำกว่า 90% ให้เพิ่ม Memory
ปัญหา: Error "Cannot allocate memory" ใน OPcache
หมายความว่า OPcache Memory เต็ม แก้โดยเพิ่ม memory_consumption หรือลด max_accelerated_files หรือ Flush Cache เพื่อเริ่มใหม่
ปัญหา: Session ค้าง / Login Logout ผิดปกติ
ไม่เกี่ยวกับ OPcache โดยตรง เพราะ OPcache เก็บแค่ Static Code ไม่ใช่ Data Runtime อาจเป็นปัญหา Session Configuration หรือ Object Cache
ปัญหา: Doctrine Annotations ไม่ทำงาน
ต้องตั้ง opcache.save_comments=1 (ค่าเริ่มต้นเปิดอยู่แล้ว) Doctrine และ Framework ที่ใช้ Annotations/Attributes ต้องการให้ Comment ใน Code ถูกเก็บไว้ใน Cache
OPcache บน PHP 7 vs PHP 8: ความแตกต่างที่ควรรู้
หากคุณยังใช้ PHP 7.x อยู่ ควรรู้ความแตกต่างนี้:
| คุณสมบัติ | PHP 7.4 | PHP 8.0+ |
|---|---|---|
| OPcache พื้นฐาน | ใช่ ครบฟีเจอร์ | ใช่ ครบฟีเจอร์ |
| JIT Compiler | ไม่มี | มี (opcache.jit) |
| Preloading | ใช่ (opcache.preload) | ใช่ ปรับปรุงแล้ว |
| fast_shutdown | ต้องตั้งเอง (=1) | เปิดอัตโนมัติ |
| Named Arguments Support | — | Cache-safe |
AsiaGB รองรับ PHP 7.4, 8.0, 8.1, 8.2 และ 8.3 บน Shared Hosting แนะนำ PHP 8.1 หรือสูงกว่า เพราะทั้ง Performance, Security Support และ OPcache ที่ดีขึ้น
OPcache Preloading: เร็วกว่าปกติด้วยการ Preload ไฟล์
PHP 7.4 ขึ้นไปมีฟีเจอร์ Preloading ที่ช่วยให้ Load ไฟล์ PHP เข้า OPcache ก่อนที่จะมี Request เข้ามาแม้แต่ครั้งแรก ทำให้ Request แรกก็ไม่ต้อง Compile แล้ว สั่งผ่านค่า:
opcache.preload=/path/to/preload-script.php opcache.preload_user=www-data
สำหรับ Laravel มี Package laravel/octane และ composer/pcre ที่ใช้ประโยชน์จาก Preloading ได้ดี อย่างไรก็ตาม Preloading ต้องการสิทธิ์ระดับ System ส่วนบน Shared Hosting ของ AsiaGB ทีม Support สามารถช่วยปรึกษาได้ถ้าต้องการเปิดใช้
คำถามที่พบบ่อย (FAQ)
AsiaGB เปิด OPcache ให้อัตโนมัติหรือต้องเปิดเอง
AsiaGB เปิด PHP OPcache ไว้บน Shared Hosting ทุกเครื่องโดยค่าเริ่มต้น ลูกค้าไม่ต้องเปิดเองหรือจ่ายเพิ่ม เพียงแค่เปิดเว็บก็ได้รับประโยชน์จาก OPcache ทันที อย่างไรก็ตามสามารถปรับแต่งค่าเพิ่มเติมได้เองผ่าน DirectAdmin
OPcache เปิดแล้วต้องทำอะไรเพิ่มไหม
โดยปกติเปิดแล้วทำงานทันทีไม่ต้องแก้โค้ด แต่ควรตรวจด้วย phpinfo() ว่า Zend OPcache แสดงสถานะ On และหากตั้ง validate_timestamps=0 ต้องสั่ง Reset OPcache ทุกครั้งหลังอัปเดตโค้ดเพื่อไม่ให้เว็บรันโค้ดเก่าค้าง
OPcache กับ Redis ต่างกันอย่างไร
OPcache แคชโค้ด PHP ที่คอมไพล์แล้วเพื่อเร่งการประมวลผลภาษา ส่วน Redis เป็น Object Cache ที่เก็บผลลัพธ์ Query ฐานข้อมูลเพื่อลดภาระ MySQL ทั้งสองทำงานคนละชั้นและใช้ร่วมกันได้ ไม่ใช่ตัวแทนกัน
เปิด OPcache แล้วเว็บยังช้าอยู่ เพราะอะไร
เพราะ OPcache เร่งเฉพาะการประมวลผลโค้ด PHP ถ้าเว็บช้าจาก Query ฐานข้อมูลที่ไม่มี Index การเรียก API ภายนอก หรือรูปภาพขนาดใหญ่ ต้องแก้ที่ต้นเหตุเหล่านั้นแยกต่างหาก
ต้องมีสิทธิ์ Root เพื่อเปิด OPcache ไหม
ไม่ต้อง บน DirectAdmin เปิดและปรับค่า OPcache ได้เองผ่านหน้า Select PHP Version โดยไม่ต้องมีสิทธิ์ Root หรือใช้ command line
OPcache JIT คืออะไร ต่างจาก OPcache ปกติไหม
JIT (Just-In-Time Compiler) เป็นคุณสมบัติของ PHP 8.0+ ที่แปลง Opcode เป็น Machine Code โดยตรง ทำให้ CPU ประมวลผลได้เร็วกว่าการตีความ Opcode ทีละบรรทัด เหมาะสำหรับงานคำนวณเข้มข้นเช่น Image Processing สำหรับเว็บ CRUD ทั่วไปอาจไม่เห็นผลต่างชัดเจน
OPcache ทำให้ใช้ RAM มากขึ้นไหม
ใช่ OPcache จองพื้นที่ RAM ตามค่า memory_consumption (ปกติ 128MB) แต่ RAM ที่ใช้ไปช่วยลด CPU และ I/O ได้มาก บน Shared Hosting AsiaGB เซิร์ฟเวอร์ออกแบบให้รองรับ OPcache ทุกเครื่องอยู่แล้ว จึงไม่ส่งผลกระทบต่อ Quota ของลูกค้า
ถ้าลูกค้าหลายคนอยู่เซิร์ฟเวอร์เดียวกัน OPcache จะแชร์กันหรือเปล่า
OPcache ทำงานในระดับ PHP Process และ Shared Memory ของ OS โดยทั่วไปไฟล์ PHP เดียวกันถ้า Path เดียวกันจะ Cache ร่วมกันได้ แต่แต่ละ User Account มีสิทธิ์ควบคุม PHP Settings ของตัวเองผ่าน .user.ini หรือ DirectAdmin และไม่สามารถเข้าถึง Opcode ของ User อื่นได้
Hosting พร้อม OPcache ทุกแพ็กเกจ บน DirectAdmin
AsiaGB เปิด PHP OPcache บน Shared Hosting ทุกเครื่อง รองรับ PHP 8.x, SSD Storage, Uptime 99% พร้อมทีมซัพพอร์ตไทยตอบได้ทุกวัน เริ่มต้น 500 บาท/ปี
ดูแพ็กเกจ Hosting