PHP workers กำหนดค่าเท่าไหร่? สำหรับ WordPress

PHP workers หน้าที่หลักของมันคือ…
เป็นเซอร์วิสเวิร์คเกอร์สำหรับสร้างหน้าเว็บ HTML
เพื่อให้บริการแก่ผู้เยี่ยมชมเว็บ

อธิบายให้งง ๆ คือ
ประมาณว่าผู้เยี่ยมชมส่งคำขอมาเท่านี้ xxx
ต้องมีคนงาน xxx (PHP workers) จำนวนเท่าไหร่
ถึงเพียงพอเป็นต้นครับ

ตัวอย่าง เช่น
สมมติว่าเว็บไซต์ WordPress ของเรา
มี PHP workers จำนวน 2 เซอร์วิสเวิร์คเกอร์
และไม่มีการตั้งค่าแคชระดับเซิร์ฟเวอร์
หรือทำ Full-page cache ดังนั้น

หากมีคำขอเข้ามา 4 requests
ที่เว็บไซต์ของเราภายในเวลาเดียวกัน
(ให้เห็นภาพ กด F5 พร้อมกัน 4เครื่อง)
คำขอ 2 รายการจะได้รับการดำเนินการทันที
และในขณะที่เหลืออีก 2 คำขอจะต้องรอคิว
จนกว่า 2 คำขอแรกจะดำเนินการเสร็จสิ้นครับ

แต่ก่อนที่เราจะพูดถึงวิธีการเพิ่มประสิทธิภาพการใช้งาน PHP เวิร์คเกอร์ สำหรับ WordPress เราต้องเข้าใจก่อนว่า WordPress ต้องใช้เวิร์คเกอร์ (คนงาน) ทำงานอย่างไร?

มาเช็คลิตส์ environment ของเรากันครับ
ระบบของคุณมีการทำงานลักษณะดังนี้ไหม…

☑️ เว็บเซิร์ฟเวอร์ ใช้ Nginx (หรือ Apache)
ในการรับคำขอจากผู้เยี่ยมชม
☑️ Nginx ส่งคำขอไปยัง PHP โดยตรง
☑️ PHP เข้าไปล่วงฐานข้อมูล MySQL ตามใจต้องการ
(query no limit) หรือผ่านการใช้เทมเพลต, ธีม…
เพื่อสร้างเพจ HTML
เช่น พวก Page building ต่าง ๆ นั้นแหละครับ
Elementor, Divi, Visual composer, Themify
หรือใช้ดีฟอลต์ Gutenberg (WordPress block editor)
☑️ PHP ส่งหน้า HTML ที่แสดงผลกลับไปที่เว็บเซิร์ฟเวอร์
☑️ หน้าเว็บเอาไว้ served ให้บริการแก่ผู้เยี่ยมชมหรือแค่แสดงคอนเทนต์

แต่สำหรับการ optimized เว็บเพื่อให้ได้ประสิทธิภาพที่ดีขึ้น
ธีมต้องไม่ซับซ้อน (ซื้อธีมพรีเมียมเถอะ 😄)
หรือปลั๊กอิน WordPress ติดตั้งในจำนวนไม่มาก
(ลงเท่าที่จำเป็นต้องใช้)

เพียงเท่านี้การประมวลผลคำขอแต่ละรายการ
ก็เกิดขึ้นได้อย่างรวดเร็วครับ
(แม้ 2 workers ก็ตอบสนอง 4 คำขอได้เกือบจะในทันที)
การตั้งค่าการแคช (Page Caching)

สำหรับไซต์ WordPress แนะนำ 2 วิธี

1. ทำเพจแคชในระดับเซิร์ฟเวอร์ (เว็บเซิร์ฟเวอร์ ติดตั้ง Nginx)

2. ทำแคชจากปลั๊กอิน เช่น WP-Rocket

แต่สำหรับการตั้งค่าเพื่อประสิทธิภาพสูงสุด
แอดขอแนะนำให้ใช้การแคชเพจระดับเซิร์ฟเวอร์
ซึ่งบน GridPane stackโฮสต์เว็บไซต์ทั้งหมดจะใช้โมดูลแคช FastCGI ของ Nginx สำหรับ Page Caching และ Redis สำหรับ Object Caching เพื่อประสิทธิภาพที่รวดเร็วเป็นพิเศษครับ

หากเว็บโฮสติ้งของคุณยังไม่มีตัวเลือกการแคชเพจระดับเซิร์ฟเวอร์แอดก็ยังคงแนะนำตัวเลือกที่ดีที่สุดครับคือ
การใช้ปลั๊กอิน (มีทั้งใช้งานฟรีและเสียเงิน แชร์ซื้อ (เดี๋ยวววว 😆)
เพื่อใช้ทำแคชเพจในระดับแอปพลิเคชันครับอาทิเช่น

☑️WP Rocket (premium)
☑️Cache Enabler (free)
☑️Comet Cache (free + premium)
☑️W3 Total Cache (free)
☑️WP Super Cache (free)
☑️WP Fastest Cache (free + premium)
☑️Hyper Cache (free)
เชิญเลือกตามเงินในกระเป๋า

ถัดมาอีกเรื่องสำหรับการเพิ่มประสิทธิให้กับเว็บไซต์
ก็คงเป็นเรื่องโค้ด PHP ครับ ไม่ว่าจะเป็นในส่วนของธีม ที่คุณใช้ ปลั๊กอินที่คุณซื้อ ต้อง quality plugin

สุดท้าย…
ก็คงเป็นเรื่องของเซิร์ฟเวอร์เว็บโฮสติ้งที่ต้องเป็น
High-Performance เพราะ PHP มันใช้ทรัพยากรของ CPU ในการรันโค้ด ยิ่ง CPU เร็วก็หมายถึงการ execute code รันได้รวดเร็วตาม

และแพลตฟอร์ที่แอดอยากแนะนำก็เช่น
GridPane และ kinsta ครับ
เพราะคุณสามารถเลือกใช้เซิร์ฟเวอร์ที่เร็วที่สุดของ Google Cloud, Amazon AWS ได้ตามความที่เหมาะสมครับ

(เชิญเลือกตามเงินในกระเป๋า)

ยังไม่จบ…เตือนแล้วอ่านเพลิน ๆๆๆ

ถัดมาเป็นตัวอย่าง การคอนฟิก PHP (php.ini)
และ PHP Workers แบบ per-site configuration ครับ

ปกติเราจะคอนฟิก php.ini ในพาทไฟล์

/etc/php/{php.version}/fpm/php.ini

บาง case คุณต้องการกำหนด socket timeout
เช่น 60 secounds ต้องทำไง??

ตัวอย่างบน GridPane stack จะใช้ดังนี้

รูปแบบคำสั่ง gp stack php {php.version} ตามด้วย flag ครับ

gp stack php 7.4 -default-socket-timeout 300 {site.url} -no-reload &&

หรือกำหนด max execution time

gp stack php 7.4 -max-exec-time 60 {site.url} -no-reload &&

หรือต้องการจำกัด memory

gp stack php 7.4 -mem-limit 512 {site.url} -no-reload &&

เสร็จแล้วก็รีโหลด (ไม่ใช่รีสตาร์ท)

gp php 7.4 reload

แถม ๆๆๆ
การเปิดใช้งาน OPcache เพื่อ PHP performance ก็ทำได้ง่าย ๆ พิมพ์แล้วเคาะ enter แรง ๆ 😃

gp stack php 7.4 {site.url} -opcache-enable

#ใครอ่านจบ พิมพ์มาบอกหน่อยนะครับ
หรือกดแชร์ไปให้เพื่อน ๆ ที่รักอ่าน
(บอกนัย ๆ ว่าอ่านและสรุปมาเล่าให้ฟังด้วยวันจันทร์ 55+++)

Leave a Reply

Scroll to top