วิธีที่เร็วที่สุด ในการทำให้
ยังไม่แน่ใจว่าเวลาหายไปตรงไหน? เริ่มจาก ทำไม
วิธีทำให้ WordPress เร็วขึ้น: คำตอบ สั้น ๆ
ทำตามลำดับนี้ และทดสอบหลังทุกขั้น:
คัดลอก เว็บไซต์ ไปยัง staging และบันทึกค่าพื้นฐาน - ใช้ PHP เวอร์ชันที่ยังได้รับการสนับสนุน และอัปเดต WordPress ธีม และปลั๊กอิน
- ตรวจปลั๊กอินจากสิ่งที่มันโหลด ไม่ใช่จากจำนวน
- ใช้แคชหน้าเพียงตัวเดียว เพิ่ม object cache สำหรับ
ร้านค้า และอย่าซ้อนปลั๊กอินปรับแต่ง หลายตัว - ให้ WordPress core จัดการรูปภาพ และการโหลด
ล่วงหน้า ปรับแต่ง page builder และธีม และล้างฐานข้อมูล - แยกจัดการ WooCommerce เพราะหน้าตะกร้า หน้าชำระเงิน และหน้าบัญชี แคชทั้งหน้าไม่ได้
ทำครบเจ็ดข้อแล้วยังช้า? ธีมหรือ page builder น่าจะเป็นเพดานแล้ว
ขั้นที่ 1: ทำงานบนสำเนา staging พร้อมค่าพื้นฐาน
staging คือสำเนา
จากนั้นบันทึกค่า
| ค่าที่วัด | หาได้ที่ไหน | บอกอะไรคุณ |
|---|---|---|
| Core Web Vitals จากการเข้าชมจริง | Search Console หรือ PageSpeed Insights | |
| LCP และ Total Blocking Time จากการทดสอบแล็บ | PageSpeed Insights โหมด |
การเปลี่ยนแปลงช่วยได้หรือไม่ |
| เวลา |
Chrome DevTools แผง Network | เซิร์ฟเวอร์ใช้เวลานานแค่ไหน |
| จำนวน query และเวลา |
ปลั๊กอินฟรี Query Monitor | ปลั๊กอินไหน ทำให้เซิร์ฟเวอร์ยุ่ง |
บทความ อธิบาย Core Web Vitals อธิบายเกณฑ์ “ดี” ของ Google ไว้ staging มักไม่มีแคช หรือ CDN แบบเว็บจริง จึงควรเทียบผลใน
ขั้นที่ 2: อัปเดต PHP WordPress และส่วนอื่นทั้งหมด
ทุกหน้าที่ไม่ได้เสิร์ฟจากแคช ถูก
ลองตรวจเอง เมนู Tools → Site Health → Info → Server แสดงเวอร์ชัน PHP ของคุณ และแผงควบคุม
ทำอย่างปลอดภัย เปลี่ยนบน staging ก่อน คลิกไล่หน้าสำคัญ ส่ง
จากนั้นอัปเดต core ธีม และปลั๊กอิน บน staging ก่อน ธีมที่ถูกแก้โค้ดโดยตรง จนไม่มีใครกล้าอัปเดต ต้องแก้ปัญหานี้ก่อน บทความ
ขั้นที่ 3: ตรวจปลั๊กอินจากสิ่งที่โหลด ไม่ใช่จำนวน
“ปลั๊กอินเยอะเกินไป” เป็น
| ต้นทุนเกิดที่ไหน | ตัวอย่างทั่วไป | ทำให้อะไรช้าลง |
|---|---|---|
| ไฟล์ที่ส่งถึง |
การโหลด และการ |
|
| งานของเซิร์ฟเวอร์ ต่อการเปิดหน้า | query “บทความที่เกี่ยวข้อง” แบบสด สถิติการเข้าชม | TTFB ของหน้าที่ไม่ได้เสิร์ฟจากแคช |
| งาน |
การสแกนตาม |
หน้า |
ลองตรวจเอง ออกจากระบบ เปิดหน้าสำคัญ พิมพ์ /plugins/ ในช่องกรองของแผง Network ใน DevTools แล้ว
สำหรับปลั๊กอินแต่ละตัว:
- ลบ ตัวที่ไม่มีใครใช้ ลบทิ้งเลย แทนการปิดใช้งาน เพราะโค้ดของปลั๊กอินที่ปิดใช้งาน ยังอยู่บนเซิร์ฟเวอร์ และยังต้องอัปเดต
- แทนที่
เครื่องมือ ที่หนัก ด้วยตัวที่เบากว่า หรือไม่ใช้อะไรเลยสไลเดอร์ หน้าแรก มักได้ผลดีกว่า ถ้าเป็นภาพเด่นภาพเดียว - จำกัด ที่เหลือ ให้โหลดเฉพาะหน้าที่ต้องใช้ ผ่านการ
ตั้งค่า ปลั๊กอิน หรือให้นักพัฒนา ทำ แล้วทดสอบ เพราะสคริปต์ที่ถูกเอาออกจากหน้าผิด ทำให้ของพังแบบเงียบ ๆ
ขั้นที่ 4: ตั้งค่า แคชครั้งเดียว ในชั้นที่ถูกต้อง
แคชมักเป็นการปรับอย่างเดียวที่ได้ผลมากที่สุด บน
- แคชหน้า (page caching) เก็บ HTML ที่
สร้าง เสร็จแล้ว เพื่อไม่ต้องสร้าง หน้าใหม่ ให้ผู้เข้าชม ทุกคน ใช้แคชหน้าเพียงตัวเดียว จะเป็นของโฮสต์หรือของปลั๊กอินก็ได้ เว้นแต่โฮสต์บอกว่า ทั้งสองออกแบบ มาให้ทำงานร่วมกัน - Object caching (Redis หรือ Memcached) เก็บผลลัพธ์จาก
ฐานข้อมูล ไว้ในหน่วยความจำ ช่วยส่วนที่แคชทั้งหน้าไม่ได้ ได้แก่ หน้าแดชบอร์ด ผู้ใช้ ที่ล็อกอิน ตะกร้าสินค้า และหน้าชำระเงิน
ลองตรวจเอง ใน DevTools เลือกคำขอของหน้านั้น แล้วอ่าน response header โฮสต์ ปลั๊กอิน และ CDN หลายราย จะเพิ่ม header ที่แสดงว่า HIT หรือ MISS โหลดหน้าสองครั้ง ตอนออกจากระบบ ยังเป็น MISS? แปลว่าแคชหน้าไม่ทำงาน ถ้าเป็น HIT แล้ว แต่เซิร์ฟเวอร์ยังตอบช้า?
อย่าซ้อนปลั๊กอินปรับแต่ง
ปลั๊กอินแคชมักพ่วงของแถม เช่น การ minify การรวมไฟล์ การลบ CSS ที่ไม่ได้ใช้ lazy loading และการหน่วง JavaScript ถ้าใช้สองตัว หรือใช้ตัวเดียวคู่กับ
ทดสอบตัวที่เสี่ยงที่สุด
- หน่วง JavaScript ไว้จนกว่าจะมีการโต้ตอบ อาจทำให้คะแนนแล็บดูดี แต่สคริปต์จะไปโหลดตอนแตะครั้งแรก ทำให้การแตะนั้นช้า และบางครั้งทำให้เมนู แบนเนอร์คุกกี้ และระบบวิเคราะห์ข้อมูลพัง
- ลบ CSS ที่ไม่ได้ใช้ อาจตัดสไตล์ของเมนู
ป๊อปอัป และแท็บ ที่แสดงหลังคลิกเท่านั้น - รวมไฟล์ ช่วยได้น้อยกว่าเดิมมาก บน HTTP/2 และ HTTP/3
ล้างแคชทุกชั้น หลังทุกการเปลี่ยนแปลง ทดสอบใหม่ และจดไว้ว่าเปิดอะไรไปบ้าง
ขั้นที่ 5: ให้ core จัดการรูปภาพและการโหลดล่วงหน้า
รูปภาพ
สำหรับรูปในคลังสื่อ WordPress srcset เพื่อให้fetchpriority="high" ให้รูปที่มันประเมินว่า น่าจะเป็น
- ภาพ hero ที่ตั้งเป็น
พื้นหลัง CSS ซึ่งเป็นนิสัยของ page builder เบราว์เซอร์จะเจอรูปช้า และการจัดการของ WordPress ใช้ไม่ได้ ใช้รูปภาพธรรมดา ถ้าทำได้ - ปลั๊กอิน lazy-load ตัวที่สอง ซึ่งอาจตั้ง lazy-load ให้รูปหลัก และทำให้ LCP ช้าลง
- เทมเพลตที่เรียกรูปขนาดเต็ม รูปขนาด 2,560 พิกเซล จึงถูกใช้ในการ์ดขนาด 400 พิกเซล
บทความ การ
การโหลดล่วงหน้า (speculative loading)
ตั้งแต่ WordPress 6.8 core เพิ่ม speculation rules ที่ให้เบราว์เซอร์ที่รองรับ เริ่มดึงหน้า
ลองตรวจเอง ออกจากระบบ ดู source ของหน้า แล้วค้นหา speculationrules ไม่เจอ? ตรวจว่า Settings → Permalinks ไม่ได้ตั้งเป็น “Plain” ถ้าปลั๊กอิน
ขั้นที่ 6: ปรับ page builder ธีม และฐานข้อมูล
การตั้งค่า page builder และธีม
ทั้ง Elementor และ Breakdance มีการ
- แท็บ Performance ของ Elementor มีการโหลดรูปภาพแบบ
ปรับแต่ง แล้ว การโหลด Google Fonts จากเซิร์ฟเวอร์ของคุณเอง และการแคชองค์ประกอบ - แท็บ Performance ของ Breakdance หยุดไม่ให้ WordPress โหลดสไตล์ของ block editor สคริปต์
อีโมจิ และ Dashicons สำหรับผู้เข้าชม ที่ไม่ได้ล็อกอินได้ ตัดสไตล์ของบล็อก เฉพาะเมื่อไม่มีคอนเทนต์ ไหนใช้บล็อก ซึ่งบทความบล็อกมักใช้
วิธี
ธีมอเนกประสงค์ มักพ่วง
ล้างฐานข้อมูล อย่างระมัดระวัง
การใช้งานหลายปี ทิ้ง revision, transient ที่หมดอายุ สแปม และการ
WooCommerce: ทำไมร้านค้า จึงรักษาความเร็วยากกว่า
หน้าตะกร้า หน้าชำระเงิน และหน้า My Account แคชทั้งหน้าไม่ได้ เพราะแต่ละหน้า แสดงข้อมูลของคนคนเดียว ความเร็วของหน้าเหล่านี้ จึงขึ้นกับ PHP
ส่วนที่ปรับตามแต่ละคน ทำให้แคชที่อื่นอ่อนลง ตั้งแต่เวอร์ชัน 7.8 WooCommerce โหลดสคริปต์ cart fragments เฉพาะหน้าที่มีv= ต่อท้าย ทำให้แคชแตกออกเป็นหลายชุด ถ้าราคาและภาษี ไม่ได้ต่างกันตามพื้นที่ การตั้งตำแหน่งลูกค้า
แอป
เมื่อธีมหรือ page builder คือเพดานจริง
page builder ไม่ใช่ตัวร้าย ตัวที่
คุณน่าจะชนเพดานแล้ว เมื่อ:
- TTFB ของหน้าที่ไม่ได้แคช ยังช้าบน
โฮสติ้ง ที่ดี ทั้งที่เปิด object caching และตัดปลั๊กอินแล้ว - PageSpeed Insights ยังเตือนเรื่อง DOM ที่ใหญ่มาก หรือ CSS และ JavaScript ที่ไม่ได้ใช้ จากธีมหรือ page builder
- ความเร็วที่ได้มา หายไปภายในไม่กี่เดือน เมื่อคนแก้ไข
คอนเทนต์ เพิ่มหน้าด้วยวิธีเดิม
ทางแก้ในตอนนั้น คือ
ขั้นต่อไป
อยากรู้ว่า