บทความนี้จะมาบอกว่าทำไมในการทำเวปไซต์ด้วย WordPress จำเป็นต้องทำ Caching ทำแล้วช่วยอะไรได้
WordPress เป็น CMS ที่ค่อนข้างใหญ่และมีโครงสร้างซับซ้อน ในการ query หรือค้นหาข้อมูลมาแสดงหน้าเวปแต่ละครั้งจะผ่าน function ต่างๆเยอะแยะมากมาย หากคนเข้าเวปน้อยๆก็จะยังไม่เห็นปัญหาแต่ถ้ามีการใช้งาน (realtime) หลักพันหรือหลักหมื่น หากไม่มีระบบ Cache เข้ามาช่วย เซิฟเวอร์แรงแค่ไหนก็เอาไม่อยู่ครับ
Plugin ที่บริหารจัดการ Caching ของ WordPress มีมากมายในท้องตลาดแต่ที่ทาง Ruk-Com เลือกใช้ให้กับลูกค้าและเราได้ทดสอบเป็นอย่างดีแล้วว่าถ้าเราตั้งค่าอย่างถูกต้องก็จะสามารถใช้งานได้เต็มประสิทธิภาพของเซิฟเวอร์ นั่นคือ WP Super Cache ด้วยการตั้งค่าที่ง่ายและ Plugin ไม่มีความซับซ้อนมาก
จากที่เราได้มีการทดสอบให้กับลูกค้า VPS ของเราโดยใช้ Memory ประมาณ 4GB เท่านั้นสามารถรับทราฟฟิกได้หลักล้าน UIP ต่อวันได้สบายๆ (ในส่วนนี้ต้องมีการปรับแต่ง Web Server เพิ่มเติมหรือเรียกว่าการทำ Performance Tuning)
ขั้นตอนการตั้งค่า WP Super Cache
ปรับแต่ง permalink เพื่อให้รองรับกับการ cache ด้วย mod_rewrite
เพื่อให้การตั้งค่าได้ถูกต้องแนะนำให้เลือก Plan แล้วกด Save หลังจากนั้นลบไฟล์ .htaccess ทิ้ง แล้วค่อยเลือก Custom Structure (ตามภาพด้านบน) ในที่นี้ผมอยากให้ URI ของเวปไซต์สั้นๆ เลยตั้งค่าแค่ /%post_id% หรือใครชอบให้มีหัวข้อของเนื้อหาอยู่ในบทความก็อาจจะตั้งเป็น /%postname% ก็แล้วแต่ความชอบและความเชื่อหรือเทคนิคเกี่ยวกับ SEO ครับ ^ ^
ต่อไปติดตั้ง Plugin WP Super Cache
เปิดใช้งาน cache
โดยทำการตั้งค่าดังนี้
แนะนำให้เลือกเป็น expert เพื่อเปิดใช้งาน mod_rewrite เพราะเป็น mode ที่ทำงานได้เร็วที่สุด
หลักๆให้เลือกที่ทาง Plugin Recommended มาครับและเพิ่มในส่วนของการให้ Clear Cache เมื่ออัพเดทบทความใหม่ ส่วนค่าที่เหลือสามารถใช้งาน Default ได้เลยครับ เสร้จแล้วกด update mod_rewrite rule ตามภาพด้านล่าง
หลังจากติดตั้ง Plugin เสร็จแล้วแนะนำเพิ่มเติมคือให้ทำการตั้งค่าไม่ให้ WordPress เรียก 404.php ของ Themes เพราะในส่วนนี้จะไม่ cache และส่วนใหญ่โดย default ของ Themes จะมีการ query ทั้ง header, menu , widget เป็นจำนวนมาก ลองเข้าไปดู 404.php ของ Themes ที่ใช้ได้ที่
Appearance -> Editor -> 404.php ปกติผมจะทำการลบ Code ในนี้ด้วยและใส่เพียงแค่
<?="404 not found"; ?>
และแก้ไข .htaccess ไม่ให้มีการ execute ไฟล์ใน wp-content โดยเพิ่มบรรทัดสีแดงเข้าไปดังนี้
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/wp-content/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
ในส่วนของการติดตั้ง Cache ก็เรียบร้อยแล้วครับ
เพิ่มเติมให้อีกนิดครับในบาง Themes จะมีการส่งค่า POST ไปที่ admin-ajax.php ตลอดเวลาเท่ากับว่าทุกๆ 1 request จะมีการส่งค่าเข้าไปให้ Web Server ประมวลผลเป็นจำนวนมากทำให้กินทรัพยากรเซิฟเวอร์ เราแก้ไขได้ด้วยการติดตั้ง Plugin Heartbleed Control และตั้งค่าตามนี้ได้เลยครับ
ภาพตัวอย่างการส่ง POST request จำนวนมาก หาก Themes หรือ Plugin บางตัวมีการเรียก heartbeat API