หลายๆคนที่ใช้งาน WordPress แล้วพบกับปัญหาการติดตั้ง Theme, Plugin เข้าไปเยอะ แล้วทำให้หน้าเว็บโหลดช้า ทำงานช้าอย่างมาก หรือบางคนไม่ได้ติดตั้งอะไรมากมาย แต่มีคนเข้าเยอะๆ โฮสล่ม หรือโดนเตะออกก็มี เพราะไปทำให้ระบบทำงานหนักนั่นเอง
ปัญหาเหล่านี้เชื่อว่ามือใหม่ WordPress ต้องเจอกันทุกๆคนไป หากไม่ได้เข้าใจการทำงานของระบบ Server ก็จะทำให้หาวิธีการแก้ไขปัญหาตรงนี้ได้ยากพอสมควรเลยแหละ วันนี้ผมจึงมาบอกวิธีการแก้ไขปัญหาเว็บ WordPress โหลดช้า และอธิบายวิธีการ ว่าทำไมมันถึงเร็วขึ้นได้ และมันทำงานอย่างไร..?
เริ่มจาก WordPress เป็น CMS ที่ใช้ภาษา PHP เขียนระบบ Backend (ระบบที่ทำงานอยู่บนเซิฟเวอร์) และส่วนใหญ่จะใช้ Apache ในการทำ Web Server เพราะว่าสะดวกและง่าย อีกทั้งยังหาเช่าใช้บริการ Hosting สำหรับวางระบบ WordPress ได้ง่ายอีกด้วย, บางที่จะมี Nginx ให้ใช้ ก็สามารถใช้คู่กับ PHP-FPM หรืออื่นๆอีกได้ หรือจะใช้ Nginx เป็น Proxy และใช้ Apache เป็น Backend ก็ได้อีกเช่นกัน
การทำงานของ WordPress ในการโหลดหน้าเว็บไซต์ 1 ครั้ง ระบบจะทำการประมวลผลภาษา PHP จำนวนมากมาย เริ่มตั้งแต่ตัวระบบ WordPress Core หรือตัวหลักของมัน ไปยัง Theme ที่ใช้งาน และไปยัง Plugin ที่ใช้งาน ต้องประมวลผลเสร็จทั้งหมด จึงจะสามารถแสดงผลออกมาให้เราได้เห็นเป็นรูปเป็นร่างบนเบราเซอร์ของเรา มันหนักก็ตรงนี้แหละ ยิ่งถ้ามี Theme หรือ Plugin ที่เขียนโค๊ดจำนวนมาก และซับซ้อน (โค๊ดน้อยหนักๆก็มีนะ มันจะช้าหรือเร็วไม่ได้ขึ้นกับจำนวนบรรทัดของโค๊ด) ก็จะทำให้ต้องประมวลผลภาษา PHP นานกว่าปกติ, ความเร็วในขั้นตอนนี้ยังเกี่ยวเนื่องถึงส่วนของ Hardware ที่ใช้ในการประมวลผล ประเภทของ CPU, RAM และ Storage อีกด้วย
วิธีการที่จะทำให้มันประมวลผลน้อยลงก็คือ “การทำแคช (Cache)” สถานเดียวเท่านั้น ซึ่งความหมายของการทำแคชก็คือ การเก็บผลลัพท์ที่ประมวลผลได้เก็บไว้ และเอาไช้ในการเรียกหน้าเว็บครั้งต่อไป มันก็จะข้ามขั้นตอนการประมวลผลไป ขั้นตอนลักษณะนี้เรียกว่าการทำ Cache ข้อมูลนั่นเอง ส่วนวิธีการที่จะทำแคช มันก็มีหลากหลายส่วนด้วยกัน ก็อย่างที่อธิบายไปข้างต้น กว่าจะแสดงผลออกมาเป็นเว็บไซต์ให้เราเห็นนั้น มันมีขั้นตอนการประมวลผลมากมาย จึงจะขอลำดับขั้นตอนการทำแคชข้อมูลสำหรับ WordPress ดังต่อไปนี้
WordPress ทำแคชด้วย Opcode Cache สำหรับการประมวลผล PHP
ในการเรียกเว็บทุกๆครั้ง ก็จะมีการประมวลผลภาษา PHP และทำการ Compile ไปเป็นภาษา Opcode หรือภาษาที่เครื่องคอมพิวเตอร์เข้าใจและสามารถประมวลผลได้ ส่วนหนึ่งที่ทำให้ระบบ WordPress CMS ทำงานหนัก, หรือไม่ว่าจะระบบอะไรก็ตามที่ใช้ภาษา PHP เขียนขึ้น มันจะต้องทำการ Compile ไฟล์ภาษา PHP ใหม่ทุกๆครั้ง มันไม่เหมือนพวกภาษา Java ที่จะต้อง Compile ก่อน จึงจะนำไปใช้งานได้, จุดด้อยของภาษา PHP ตรงนี้จึงทำให้มันทำงานได้ช้าๆ และรองรับการใช้งานหนักๆไม่ค่อยจะได้เท่าไรนัก ก็เลยเป็นจุดเริ่มต้นของการทำ Opcode Cache ด้วย Extension ที่สร้างขึ้นมา เช่น Xcache, APC Cache และล่าสุดก็เป็น OPcache ที่เห็นว่าเสถียรๆกว่าชาวบ้านหน่อยนะ ส่วนตัวผมเองก็แนะนำเป็น OPcache เช่นกัน
WordPress ทำแคชด้วย Plugin สำหรับ Caching + Apache
Plugin ที่เราจะแนะนำให้ใช้งานสำหรับทำแคชข้อมูลก็คือ “WP Super Cache” ซึ่งมีความสามารถในการทำแคชข้อมูลในการประมวลผลทั้งหมด เก็บลงไฟล์เป็นลักษณะของ HTML หรือเป็นส่วนที่จะ Response กลับไปแสดงผลยังเบราเซอร์ และใช้ความสามารถของ .htaccess ในการทำการ Redirect เมื่อมีการเรียกใช้งานหน้าเว็บไซต์ .htaccess จะไปเรียกไฟล์ที่แคชไว้มาส่งกลับไปยังผู้ใช้งานทันที โดยไม่เข้าไปประมวลผลที่ PHP เลยแม้แต่น้อย ทำให้ตัดขั้นตอนที่ต้องประมวลผลภาษา PHP ออกไปได้ทันที
ด้วยความสามารถนี้ ไม่ว่าจะใช้งาน Plugin โหดขนาดไหน, หรือ Theme โหดขนาดไหน ก็จะถูกประมวลผลแค่คั้งแรกเท่านั้น และเก็บผลลัพท์ใส่ไฟล์ .html เบาๆสบายๆ รับรองได้เลยว่าเว็บไซต์ของคุณจะเร็วขึ้นอย่างมหาศาลเลยทีเดียว
WordPress ทำแคชไฟล์รูปภาพ หรือ Static ไฟล์อื่นๆ ด้วย Nginx
ตัวระบบ WordPress ใช้ PHP เขียน Backend ก็จริง แต่ก็ต้องมีไฟล์ที่ถูกส่งไปรันยังเครื่องคอมพิวเตอร์ของผู้ใช้งาน หรือฝั่ง Client เช่น Javascript, CSS หรือเรียกข้อมูลที่เป็น Static File (ไฟล์ที่ไม่มีการแก้ไข) เช่น รูปภาพ เป็นต้น
หลายคนยังคงเจอปัญหา ถึงแม้ว่าจะแคชข้อมูลด้วยขั้นตอนที่กล่าวมาก่อนหน้านี้แล้ว แต่ก็ลืมไปว่า Apache ก็ยังมีจุดด้อยในเรื่องของการใช้ทรัพยากร RAM และจำนวน Connection รวมถึง การทำงานกับ Static File ที่ไม่สู้ดีนัก, การที่จะให้ Nginx เข้ามาช่วยในเรื่องนี้ เห็นว่าเป็นเรื่องที่เยี่ยมยอดมากๆ เพราะว่า Nginx มีประสิทธิภาพในการประมวลผลกับ Static File ได้ดีกว่า Apache เป็นไหนๆ
หลักการทำงานก็คือ ใช้ให้ Nginx เป็น Proxy ทำหน้าที่อยู่เบื้องหน้า คอยรับ Request จากผู้ใช้งาน และหากมีการเรียก Static File ก็ให้ Nginx ทำงานไป หากไม่ใช่ ก็จะส่ง Req ต่อไปยัง Apache ที่ทำงานอยู่เบื้อหลัง ให้ Apache ประมวลผลและตอบกลับอีกที, ด้วยวิธีการนี้ จะทำให้เว็บไซต์โหลดรูปภาพและไฟล์อื่นๆได้อย่างรวดเร็ว อีกทั้งยังรองรับ Connection ได้เยอะขึ้นอีกด้วย