บทความนี้นำเสนอวิธีแก้ปัญหาที่เป็นประโยชน์สำหรับการเพิ่มประสิทธิภาพ PHP การบัฟเฟอร์ และการบีบอัด
เนื่องจากเป็นภาษาเขียนโปรแกรมบนเว็บยอดนิยม ข้อได้เปรียบที่ใหญ่ที่สุดของ PHP คือความเร็ว PHP4 ทำได้ดีมากและคุณแทบจะไม่สามารถหาภาษาสคริปต์ที่เร็วกว่านี้ได้ แต่หากแอปพลิเคชันของคุณมีการโหลดจำนวนมาก แบนด์วิดท์ของคุณค่อนข้างน้อย หรือมีคอขวดอื่นๆ ที่ส่งผลต่อประสิทธิภาพเซิร์ฟเวอร์ของคุณ คุณอาจต้องลองใช้ข้อกำหนดบางอย่างที่ฉันกำหนดไว้ให้คุณเพื่อดูว่าได้ผลหรือไม่
1. การเพิ่มประสิทธิภาพโค้ด
เมื่อพูดถึงการเพิ่มประสิทธิภาพโค้ด คุณอาจนึกถึงโค้ดที่เรียบร้อยและชัดเจน แต่นี่ไม่ใช่ความหมายของบทความนี้ เพราะถ้าคุณต้องการความเร็ว คุณต้องทำการปรับเปลี่ยนซอร์สโค้ด PHP ให้สอดคล้องกัน โดยทั่วไปแล้ว ความคิดเห็นที่ซ้ำซ้อนจะถูกลบออกเพื่อทำให้โค้ดไม่สามารถอ่านได้ แต่สำหรับโปรแกรมเมอร์ที่มีคุณสมบัติดี นี่เป็นเรื่องที่เหลือเชื่อมาก โชคดีที่ Zend Technologies ได้เปิดตัว Zend Optimization Engine เพื่อช่วยให้คุณทำสิ่งนี้ได้ ใช้งานได้ฟรี แต่คุณต้องปฏิบัติตามใบอนุญาต Zend Optimizer ผลิตภัณฑ์นี้สามารถปรับรหัสกลางที่สร้างโดยเครื่องยนต์ให้เหมาะสมได้
การติดตั้งเอ็นจิ้นนี้ค่อนข้างง่าย หลังจากดาวน์โหลดเวอร์ชันที่สอดคล้องกับแพลตฟอร์ม ให้แตกไฟล์บีบอัด จากนั้นเพิ่มสองบรรทัดต่อไปนี้ลงในไฟล์ php.ini รีสตาร์ทเว็บเซิร์ฟเวอร์ เท่านี้ก็เสร็จเรียบร้อย
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=ปิด
หากเป็นแพลตฟอร์ม Win32 ควรเป็น:
zend_optimizer.optimization_level=15
zend_extension_ts = "C: เส้นทางหรือ endOptimizer.dll"
zend_loader.enable=ปิด
! นั่นไม่ผิดใช่ไหม? ทำไมต้องสามบรรทัด? จริงๆ แล้วบรรทัดที่สามเป็นทางเลือก เนื่องจากดูเหมือนว่าการปิด zend_loader จะสามารถปรับปรุงความเร็วได้เล็กน้อย จึงคุ้มค่าที่จะใส่บรรทัดที่สามนี้ใน php.ini ควรสังเกตว่าข้อกำหนดเบื้องต้นในการปิดคือคุณไม่ได้ใช้โปรแกรมเข้ารหัส Zend
2. การบัฟเฟอร์
หากเราต้องการปรับปรุงความเร็วให้ดียิ่งขึ้น เราต้องพิจารณาใช้เทคโนโลยีการบัฟเฟอร์ มีโซลูชันทางเลือกบางส่วน รวมถึง Zend Cache (เวอร์ชันเบต้า), APC และ Afterburner Cache รวมถึง jpCache
ข้างต้นคือโมดูลบัฟเฟอร์ทั้งหมด โดยจะจัดเก็บโค้ดระดับกลางที่สร้างขึ้นโดยคำขอแรกสำหรับไฟล์ .php ไว้ในหน่วยความจำของเว็บเซิร์ฟเวอร์ จากนั้นจึงส่งคืนเวอร์ชัน "ที่คอมไพล์แล้ว" สำหรับคำขอครั้งต่อไป เนื่องจากสิ่งนี้จะช่วยลดการอ่านและเขียนดิสก์และการทำงานทั้งหมดในหน่วยความจำ กระบวนการนี้จึงสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันได้อย่างมาก
มีผลิตภัณฑ์ดังกล่าวมากมายที่พร้อมจำหน่าย ดังนั้นคุณควรเลือกใคร
Zend Cache เป็นผลิตภัณฑ์เชิงพาณิชย์ที่ดี หลังจากโหลดหน้า PHP ขนาดใหญ่เหล่านั้นเป็นครั้งแรก คุณจะรู้สึกว่าความเร็วเพิ่มขึ้นอย่างเห็นได้ชัด และเซิร์ฟเวอร์จะจัดสรรทรัพยากรมากขึ้น น่าเสียดายที่ผลิตภัณฑ์นี้ต้องเสียค่าใช้จ่าย แต่ในบางกรณี คุณคงไม่อยากเสียเงินไป
Afterburner Cache เป็นผลิตภัณฑ์ของ Bware Technologies และขณะนี้อยู่ในเวอร์ชันเบต้า ดูเหมือนว่าจะเหมือนกับ Zend Cashe แต่ไม่สามารถบรรลุผลลัพธ์ที่ดีเท่า Zend Cache และไม่สามารถทำงานกับเอ็นจิ้นการเพิ่มประสิทธิภาพ Zend ได้ แต่ฟรี ดังนั้นฉันจึงใช้โมดูลนี้
APC (Alternative PHP Cache) เป็นอีกหนึ่งโมดูลฟรีที่ออกโดย Community Connect ซึ่งดูเหมือนว่าจะพร้อมสำหรับสภาพแวดล้อมการใช้งานจริง
3. การบีบอัดเนื้อหาเว็บ
สำหรับเครือข่ายที่มีผู้คนหนาแน่นมากขึ้น การประหยัดแบนด์วิธมีค่าพอๆ กับการประหยัดน้ำ ตามมาตรฐาน IETF เบราว์เซอร์ส่วนใหญ่ควรรองรับเนื้อหาที่บีบอัดโดยใช้ gzip ซึ่งหมายความว่าคุณสามารถส่งเนื้อหาที่บีบอัด gzip ไปยังเบราว์เซอร์ได้ และเบราว์เซอร์จะขยายขนาดข้อมูลอย่างโปร่งใส
mod_gzip เป็นโมดูล Apache ฟรีที่เปิดตัวโดย Remote Communications ซึ่งสามารถบีบอัดเนื้อหาเว็บแบบคงที่และส่งไปยังเบราว์เซอร์ สำหรับหน้าเว็บแบบคงที่ส่วนใหญ่ โมดูลนี้เหมาะสม แม้ว่า
ผู้คนจากบริษัท Remotecommunications จะบอกว่าโมดูลนี้รองรับเนื้อหาไดนามิกทั้งหมดที่สร้างโดย mod_php, mod_perl, mod และอื่นๆ แต่ดูเหมือนว่าจะไม่ทำงาน เมื่อพิจารณาจากรายชื่อผู้รับจดหมาย mod_gzip ปัญหานี้ไม่คาดว่าจะได้รับการแก้ไข จนถึง 1.3.14.6f.
หากเราต้องการบีบอัดเนื้อหาแบบไดนามิก เราสามารถใช้ class.gzip_encode.php ซึ่งเป็นคลาส PHP ที่ใช้ตอนต้นและตอนท้ายของสคริปต์ สำหรับเว็บไซต์ทั้งหมด มีการเรียกฟังก์ชันใน auto_prepend และ auto_append ของ php.ini รายละเอียดสามารถอ่านโปรแกรมของคลาสนี้ได้เลย คอมเมนท์ดี และผู้เขียนก็เล่าให้ฟังแทบทุกเรื่อง แต่ก่อนใช้งาน PHP ของคุณต้องได้รับการคอมไพล์เพื่อรองรับ zlib ก่อน
สำหรับ PHP 4.0.4 วิธีแก้ปัญหาใหม่คือการใช้ ob_gzhandler ซึ่งสามารถบรรลุผลเช่นเดียวกับคลาสข้างต้น เพียงเพิ่มประโยคต่อไปนี้ใน php.ini:
output_handler = ob_gzhandler;
ซึ่งจะทำให้ PHP เปิดใช้งานการบัฟเฟอร์เอาต์พุตและบีบอัดเอาต์พุตทั้งหมด หากมีเหตุผลพิเศษใดๆ ที่ทำให้คุณไม่ต้องการให้เนื้อหาทั้งหมดถูกบีบอัดและส่งออก คุณสามารถเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ .htaccess เพื่อบีบอัดไฟล์ในไดเร็กทอรีที่เกี่ยวข้อง
php_value output_handler ob_gzhandler
สามารถเพิ่มได้โดยตรงในโค้ด PHP:
ob_start("ob_gzhandler");
เทคโนโลยีการบีบอัดนี้มีประสิทธิภาพมาก แต่สำหรับผู้ใช้ Netscape Communicator มันดูไม่สมบูรณ์เนื่องจากไม่สามารถบีบอัดไฟล์กราฟิกได้ Mu⑺Stop มีปัญหาอะไร การบีบอัดไฟล์ jpeg และ gif ใช่ไหม IE ไม่มีปัญหานี้
สรุป:
การใช้เทคนิคที่กล่าวถึงในบทความนี้ควรปรับปรุงประสิทธิภาพเว็บไซต์ของคุณ แต่โปรดทราบว่า:
- PHP อาจไม่ใช่สาเหตุของปัญหาคอขวด ให้ตรวจสอบสาเหตุอื่นๆ อีกครั้ง (เช่น ฐานข้อมูล)
- คุณไม่สามารถเพิ่มสถานะประสิทธิภาพเซิร์ฟเวอร์ให้สูงสุดได้ ดังนั้นก่อนที่จะบ่นเกี่ยวกับ PHP และการบัฟเฟอร์ของ PHP ให้พิจารณาว่าถึงเวลาที่ต้องอัปเกรดเซิร์ฟเวอร์ของคุณหรือนำเทคโนโลยี Dynamic Load Balancing มาใช้ (ซึ่งเป็นเงินจำนวนมาก)
- อย่าประมาทการบีบอัดเนื้อหา แม้ว่าคุณจะเห็นการปรับปรุงความเร็วของแอปพลิเคชัน PHP บนอินทราเน็ตขนาด 100 Mb ของคุณ อย่าลืมว่าผู้ใช้โมเด็มของคุณบ่นเกี่ยวกับหน้า HTML ขนาด 100Kb ของคุณจากจุดใดบ้าง