วิธีเปิดใช้งานและตั้งค่า PHP Opcache ใน ServBay
ServBay คือสภาพแวดล้อมการพัฒนาเว็บบนเครื่องที่ทรงพลัง ออกแบบมาเพื่อผู้พัฒนาโดยเฉพาะ มาพร้อมกับเทคโนโลยีหลากหลาย รวมถึง PHP เพื่อช่วยให้พัฒนาแอปพลิเคชัน PHP ได้อย่างมีประสิทธิภาพยิ่งขึ้น ServBay จึงติดตั้งโมดูล Opcache สำหรับ PHP ทุกเวอร์ชันไว้ล่วงหน้า บทความนี้จะอธิบายขั้นตอนการเปิดใช้งานและตั้งค่า Opcache ใน ServBay อย่างละเอียด พร้อมชี้ให้เห็นว่า Opcache สามารถช่วยเร่งความเร็วการพัฒนาและทดสอบ PHP ของคุณได้อย่างไร
บทนำสู่โมดูล Opcache
Opcache คือส่วนขยายอย่างเป็นทางการของ PHP สำหรับเพิ่มประสิทธิภาพการทำงานของโค้ด PHP หลักการหลักคือการแคช bytecode ของสคริปต์ PHP ที่ถูกแปลแล้วเก็บไว้ในหน่วยความจำร่วม ทำให้เมื่อมีการร้องขอสคริปต์ซ้ำๆ ระบบจะหยิบเอา bytecode ที่แคชไว้นี้มาใช้ได้โดยตรง ไม่ต้องเสียเวลาวิเคราะห์ แปล และปรับแต่งโค้ดซ้ำ ช่วยลดการใช้ CPU และหน่วยความจำลงอย่างมาก พร้อมเพิ่มความเร็วในการตอบสนองให้กับแอปพลิเคชัน
ทำไม Opcache จึงสำคัญสำหรับนักพัฒนา?
- เพิ่มความเร็วในการพัฒนาและทดสอบ: การใช้ Opcache ในเครื่องพัฒนาจะทำให้แอปพลิเคชันทำงานเร็วขึ้น ลดเวลารอโหลดหน้าเว็บ และช่วยให้ workflow พัฒนาเร็วขึ้น
- จำลองสภาพแวดล้อมโปรดักชัน: ในระบบโปรดักชันเกือบทั้งหมดจะเปิดใช้ Opcache เพื่อประสิทธิภาพ ดังนั้นการเปิด Opcache ในเครื่องพัฒนาช่วยให้คุณทดสอบแอปในสภาพแวดล้อมที่ใกล้เคียงเวอร์ชันจริง
- ลดการใช้ทรัพยากร: เหมาะอย่างยิ่งกับโปรเจกต์ที่ใช้ framework ขนาดใหญ่หรือแอปพลิเคชันซับซ้อน Opcache จะช่วยลดภาระการใช้ทรัพยากรเครื่องพัฒนาได้อย่างมีนัยสำคัญ
คุณสมบัติหลักของ Opcache
- แคช bytecode: เก็บ bytecode ที่ถูกแปลแล้วของ PHP ไว้ในหน่วยความจำ
- หน่วยความจำร่วม: แคชจะถูกเก็บไว้ใน memory ที่ PHP หลาย process ใช้ร่วมกันได้
- หมดอายุอัตโนมัติ: กำหนดให้ Opcache ตรวจสอบไฟล์ที่มีการอัปเดตเป็นระยะ เพื่อให้แน่ใจว่าใช้ bytecode ล่าสุดเสมอ
- ตั้งค่าได้ยืดหยุ่น: มีออปชันต่าง ๆ ที่ปรับเปลี่ยนได้ให้เหมาะกับแต่ละโปรเจกต์
- รองรับในตัว: เป็นส่วนขยายอย่างเป็นทางการของ PHP ที่ผนวกกับ PHP kernel โดยตรง
การสนับสนุน Opcache ใน ServBay
ServBay ได้เตรียมโมดูล Opcache ไว้ล่วงหน้ากับ PHP ทุกเวอร์ชันที่มีให้ใช้ (เช่น PHP 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 ฯลฯ) คุณไม่จำเป็นต้องดาวน์โหลดหรือคอมไพล์เอง เพียงแค่เปิดใช้งานและตั้งค่าผ่านอินเตอร์เฟซกราฟิกของ ServBay หรือแก้ไขไฟล์คอนฟิกเท่านั้น
วิธีเปิดใช้งานโมดูล Opcache
มี 2 วิธีหลักในการเปิดใช้งาน Opcache ใน ServBay: ผ่านอินเตอร์เฟซผู้ใช้ (GUI) หรือแก้ไขไฟล์คอนฟิกด้วยตนเอง
วิธีที่ 1: เปิดใช้งานผ่าน GUI ของ ServBay (แนะนำ)
วิธีนี้ง่ายและรวดเร็วที่สุด
- เปิดแอป ServBay
- ที่แถบนำทางด้านข้าง คลิกที่ ภาษา (Languages)
- เลือกเวอร์ชันของ PHP ที่ต้องการเปิดใช้งาน Opcache เช่น PHP 8.3
- ในหน้ารายละเอียดของ PHP ทางด้านขวา คลิกที่แท็บ ส่วนขยาย (Extensions)
- หา OPcache ในรายการส่วนขยาย
- เปิดสวิตช์ที่อยู่ข้างซ้ายของ OPcache
- คลิกปุ่ม บันทึก (Save) ด้านล่างของหน้า
- ServBay จะแจ้งให้คุณรีสตาร์ทชุด PHP ที่เลือกเพื่อให้การตั้งค่ามีผล คลิก รีสตาร์ท (Restart)
เมื่อรีสตาร์ทเสร็จสิ้น Opcache จะถูกเปิดใช้งานสำเร็จ
วิธีที่ 2: แก้ไขไฟล์คอนฟิกด้วยตนเอง
หากคุณต้องการตั้งค่ารายละเอียดเพิ่มเติม หรือชอบควบคุมผ่านไฟล์คอนฟิกเอง สามารถแก้ไขไฟล์ .ini
ของ Opcache ได้โดยตรง
- หาตำแหน่งไฟล์คอนฟิก: ไฟล์ตั้งค่าของ Opcache จะอยู่ในโฟลเดอร์
conf.d
ของ PHP เวอร์ชันที่ใช้งาน โฟลเดอร์นี้เก็บไฟล์คอนฟิกของส่วนขยาย PHP ต่าง ๆ- ตัวอย่างเช่น PHP 8.3 ตำแหน่งไฟล์อาจเป็นดังนี้:
/Applications/ServBay/etc/php/8.3/conf.d/opcache.ini
1 - ปรับเวอร์ชันของ PHP ตามที่คุณใช้งานจริง
- ตัวอย่างเช่น PHP 8.3 ตำแหน่งไฟล์อาจเป็นดังนี้:
- แก้ไขไฟล์คอนฟิก: เปิดไฟล์
opcache.ini
ด้วย text editor ที่คุณชอบ- ไฟล์นี้มักจะมีกรอบโครงสร้างการตั้งค่าพื้นฐานของ Opcache อยู่แล้ว เพียงแค่ถูกคอมเมนต์ไว้ ให้หา section
[Zend Opcache]
- ยกเลิกคอมเมนต์ (ลบอักษร
;
ที่ต้นบรรทัด) ที่บรรทัดzend_extension = opcache.so
เพื่อให้แน่ใจว่า Opcache จะถูกโหลดใช้งาน - ปรับเปลี่ยนหรือตั้งค่า parameter อื่น ๆ ของ Opcache ตามต้องการ ตัวอย่างการตั้งค่า (แต่ละพารามิเตอร์จะอธิบายในหัวข้อถัดไป):ini
[Zend Opcache] ; Ensure the extension is loaded zend_extension = opcache.so ; Basic Configuration (example values) opcache.enable = 1 ; Enable Opcache globally (1=enabled, 0=disabled) opcache.memory_consumption = 128 ; Amount of memory for opcode cache (in MB) opcache.interned_strings_buffer = 8; Amount of memory for interned strings (in MB) opcache.max_accelerated_files = 4000 ; Maximum number of files to cache opcache.revalidate_freq = 60 ; How often to check file timestamps for updates (in seconds). 0 = check on every request (slow), but good for development. opcache.fast_shutdown = 1 ; Enable fast shutdown opcache.enable_cli = 1 ; Enable Opcache for the PHP CLI (Command Line Interface)
1
2
3
4
5
6
7
8
9
10
11
12 - บันทึกไฟล์
opcache.ini
- ไฟล์นี้มักจะมีกรอบโครงสร้างการตั้งค่าพื้นฐานของ Opcache อยู่แล้ว เพียงแค่ถูกคอมเมนต์ไว้ ให้หา section
- รีสตาร์ทชุด PHP: ในแอป ServBay ให้ไปที่ส่วนจัดการ แพ็กเกจ (Packages) แล้วเลือก PHP และกดปุ่มรีสตาร์ท
เมื่อแก้ไขไฟล์คอนฟิกและรีสตาร์ท PHP แล้ว Opcache และการตั้งค่าจะพร้อมใช้งาน
วิธีตรวจสอบว่า Opcache โหลดสำเร็จหรือไม่
วิธีที่น่าเชื่อถือที่สุดคือดูข้อมูลคอนฟิก PHP (phpinfo()
)
- สร้างไฟล์
phpinfo.php
: สร้างไฟล์ PHP ใหม่ ชื่อphpinfo.php
ใน root directory ของเว็บไซต์ ServBay ปกติจะอยู่ที่/Applications/ServBay/www/
คุณสามารถสร้างโฟลเดอร์ย่อยเช่น/Applications/ServBay/www/servbay.demo/
แล้ววางไฟล์phpinfo.php
ไว้ที่นั่น เนื้อหาไฟล์:php<?php phpinfo(); ?>
1
2
3 - เปิด
phpinfo.php
: ตรวจสอบว่า Web server ของคุณ (เช่น Caddy หรือ Nginx) ทำงานอยู่และตั้งค่าไว้สำหรับ root directory หรือโฟลเดอร์ทดสอบ เรียกไฟล์นี้ผ่าน URL บนเบราว์เซอร์- ถ้าไฟล์อยู่ที่
/Applications/ServBay/www/servbay.demo/
และตั้ง domain เป็นservbay.demo
ไว้แล้ว ให้เข้าผ่านhttp://servbay.demo/phpinfo.php
- ถ้าอยู่ที่ root เดิม
/Applications/ServBay/www/
ใช้ URLhttp://localhost/phpinfo.php
หรือที่อยู่ที่ ServBay กำหนดไว้
- ถ้าไฟล์อยู่ที่
- ค้นหาข้อมูล Opcache: ในหน้าของ
phpinfo()
ให้เลื่อนหรือลองค้นคำว่า "Opcache" (Cmd+F
หรือCtrl+F
)- ถ้าโหลด Opcache สำเร็จ จะเห็น section "Zend Opcache" พร้อมรายละเอียดเวอร์ชัน สถานะ และการตั้งค่าปัจจุบัน
- หากไม่พบ "Zend Opcache" แสดงว่า Opcache ยังไม่ได้ถูกเปิดใช้งาน ให้ย้อนกลับไปตรวจสอบขั้นตอนการเปิดใช้งานและไฟล์คอนฟิก
ภาพตัวอย่าง: การค้นหา block การตั้งค่า Zend Opcache ในหน้าของ phpinfo
คำอธิบายพารามิเตอร์ต่าง ๆ ของ Opcache
Opcache มี parameter ที่สำคัญให้ตั้งค่าได้หลากหลาย โดยทั่วไปจะอยู่ในไฟล์ opcache.ini
ตัวอย่างต่อไปนี้ครอบคลุมพารามิเตอร์หลัก ๆ ที่ควรทราบ พร้อมคำอธิบาย
ini
[Zend Opcache]
; ตรวจสอบว่า extension ถูกโหลดแล้ว
zend_extension = opcache.so
; เปิดใช้ Opcache ค่า 0 = ปิด, 1 = เปิด สวิตช์ใน GUI ค้นควบคุมพารามิเตอร์นี้เช่นกัน
opcache.enable = 1
; หน่วยความจำสำหรับเก็บไฟล์ PHP ที่คอมไพล์แล้ว (MB)
; ปรับตามขนาดโปรเจกต์และหน่วยความจำที่มี งานขนาดใหญ่ควรเพิ่มเลขนี้
opcache.memory_consumption = 128
; หน่วยความจำสำหรับเก็บ internal string (ชื่อ class, method ฯลฯ) (MB)
; หาก framework ที่ใช้มีการใช้งาน string มาก (เช่น Symfony) อาจเพิ่มเลขนี้
opcache.interned_strings_buffer = 8
; จำนวนไฟล์สูงสุดที่ Opcache สามารถแคช
; ถ้าไฟล์ในโปรเจกต์มากกว่าค่านี้ จะมีบางส่วนที่ไม่ได้ถูกแคช กำหนดค่านี้ให้มากกว่าจำนวนไฟล์ในโปรเจกต์ที่ใช้จริง
opcache.max_accelerated_files = 10000
; ความถี่ในการตรวจสอบการเปลี่ยนแปลงของไฟล์ (วินาที)
; โปรดักชันมักจะกำหนดค่าสูง (300 หรือ 600) หรือเป็น 0 (ไม่ตรวจสอบ ต้องเคลียร์แคชด้วยตนเอง)
; **สภาพแวดล้อมพัฒนาควรตั้งค่าน้อย เช่น 1-2 วินาที** หรือถ้า 0 จะเช็คทุกครั้ง (ช้ากว่าเล็กน้อย แต่มักต้องการผลแบบนี้สำหรับนักพัฒนา)
opcache.revalidate_freq = 2
; เปิดใช้ฟีเจอร์ fast shutdown ช่วยให้คืน memory เมื่อจบ request ได้เร็วขึ้น โดยปกติควรเปิดไว้
opcache.fast_shutdown = 1
; เปิดใช้ Opcache สำหรับ CLI (Command Line Interface)
; มีประโยชน์กับการรัน script, Composer หรือ unit tests ต่าง ๆ
opcache.enable_cli = 1
; อนุญาตให้ memory ที่ไม่ได้ใช้ถูกคืนค่า กรณีจำเป็นแต่ปกติควรให้ค่า default หรือตั้งเป็น 0
; opcache.enable_file_override = 0
; ไม่แคช comment ตอนเก็บไฟล์ ประหยัด memory เล็กน้อย แต่กระทบบางเครื่องมือที่เช็ค comment
; opcache.save_comments = 1
; เก็บ docblock comment ในแคช เหมาะกับเครื่องมือเช่น PHPUnit, Doctrine ควรเปิดไว้
; opcache.load_comments = 1
; ระดับการ optimize เลขมาก = ปรับแต่งมากขึ้นแต่ใช้เวลาคอมไพล์นาน ค่า default เพียงพอสำหรับส่วนใหญ่
; opcache.optimization_level = 0x7FFFBBFF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
โปรดจำไว้ว่าทุกครั้งที่แก้ไข opcache.ini
ต้องรีสตาร์ท PHP package ที่เกี่ยวข้องเพื่อให้ค่าตั้งใหม่มีผล
คำถามที่พบบ่อย (FAQ)
- ถาม: Opcache เปิดใช้งานโดยค่าเริ่มต้นหรือไม่?
ตอบ: ใน ServBay โมดูล Opcache ถูกติดตั้งไว้ล่วงหน้าแต่ยังไม่เปิดอัตโนมัติ คุณต้องเปิดเองตามขั้นตอนที่ระบุไว้ข้างต้น - ถาม: ถ้าเปิดใช้งาน Opcache จะกระทบ workflow ในการพัฒนาหรือไม่?
ตอบ: การเปิดใช้งาน Opcache จะช่วยเพิ่มความเร็วให้แอปคุณ ในกระบวนการพัฒนา แนะนำให้ตั้งค่าopcache.revalidate_freq
ไว้ที่ 1, 2 หรือ 0 เพื่อให้เห็นผลการแก้ไขโค้ดเร็วขึ้น ส่วน production ให้ตั้งสูงขึ้นหรือ 0 พร้อมกับกลยุทธ์เคลียร์แคชด้วยตนเอง - ถาม: Opcache จะแคช script PHP จาก CLI ด้วยหรือไม่?
ตอบ: โดยค่าเริ่มต้นจะไม่แคช ต้องตั้งค่าพารามิเตอร์opcache.enable_cli
เป็น1
ถึงจะเปิดใช้ประสิทธิภาพนี้ มีประโยชน์กับ Composer, unit test หรือ command line ต่าง ๆ มาก - ถาม: ควรจัดสรร memory ให้ Opcache เท่าไรดี?
ตอบ:opcache.memory_consumption
ขึ้นกับขนาดและความซับซ้อนของโปรเจกต์ ทั่วไป 128MB หรือ 256MB ก็เพียงพอ หากโปรเจกต์ใหญ่มากหรือเจอ warning ในphpinfo()
ว่าแคชเต็ม ควรเพิ่มตัวเลขนี้อีก - ถาม: หลังจากแก้ไข
opcache.ini
ต้องทำอะไร?
ตอบ: หลังปรับคอนฟิกในไฟล์.ini
คุณต้องรีสตาร์ท PHP package ที่ใช้อยู่ เพื่อให้การตั้งค่าใหม่มีผลทันที
สรุป
Opcache คือเครื่องมือปรับแต่งประสิทธิภาพ PHP ที่ใช้งานง่ายแต่มีพลังสูง ServBay ให้แนวทางที่สะดวกทั้งแบบใช้อินเตอร์เฟซกราฟิกและแก้ไขไฟล์คอนฟิกให้ผู้พัฒนาสามารถเปิดและจัดการ Opcache ได้ทันใจ เพียงไม่กี่ขั้นตอน คุณก็สามารถเร่งความเร็วการโหลดและตอบสนองของแอป PHP ใน ServBay บนเครื่องพัฒนาได้อย่างเห็นผล การปรับแต่ง parameter ให้เหมาะกับแต่ละโปรเจกต์ ยังช่วยให้ได้ประสิทธิภาพสูงสุดในทุกสถานการณ์ มาเริ่มใช้ Opcache ใน ServBay แล้วสัมผัสศักยภาพใหม่ในการพัฒนา PHP ของคุณได้เลย!