บทเรียนยอดนิยมขณะเพิ่มประสิทธิภาพ WordPress (เพื่อความสำเร็จของลูกค้า)
เผยแพร่แล้ว: 2022-09-15ครั้งสุดท้ายที่คุณมีเมฆเก้าช่วงเวลาคือเมื่อไหร่?
เรียนจบสีสดใส..หรือเมื่อแฟน/แฟนตอบรับข้อเสนอ?
ฉันมีเมฆเก้านาทีเมื่อสองสัปดาห์ก่อน! ฉันกำลัง พูดที่ WordCamp Mumbai 2017 – WordCamp ที่ใหญ่ที่สุดของอินเดีย
หัวข้อนี้เป็นสิ่งที่ใกล้เคียงกับใจฉัน และสิ่งที่ฉันจัดการทุกวัน – บทเรียนที่เรียนรู้การเพิ่มประสิทธิภาพ WordPress เพื่อความสำเร็จของลูกค้า
มันเกี่ยวกับปัญหาที่ฉันต้องเผชิญในการจัดการกับฐานข้อมูล WordPress ขนาดใหญ่และวิธีจัดการกับมัน
อะไรกระตุ้นให้ฉันพูดที่ WordCamp Mumbai
การพัฒนาปลั๊กอิน WordPress เป็นประสบการณ์การเรียนรู้ที่ยอดเยี่ยม คุณจะได้ขยายกรอบงานที่ยอดเยี่ยม มุ่งเน้นไปที่การเขียนโค้ดที่แก้ปัญหาของลูกค้าและทำงานร่วมกับสมาชิกในทีมที่ยอดเยี่ยม
ที่ StoreApps นักพัฒนาไม่เพียงแต่เขียนโค้ดเท่านั้น แต่ยังสนับสนุนลูกค้าอีกด้วย การแก้ไขข้อสงสัยของลูกค้าได้ให้บทเรียนที่ยิ่งใหญ่ที่สุดแก่ฉัน
นั่นคือกิจวัตรประจำวันของฉันทั้งหมด และมันก็ค่อนข้างน่าตื่นเต้น
แต่คุณรู้ไหมว่าอะไรน่าตื่นเต้นสำหรับฉันมากกว่ากัน? ทำงานกับฐานข้อมูลขนาดใหญ่และแก้ปัญหาฐานข้อมูลที่ซับซ้อน!
ปลั๊กอินของเรามีผู้ใช้มากกว่า 35,000 ราย และฉันได้เห็นความท้าทายมากมายในการทำงานกับร้านค้า WooCommerce ขนาดใหญ่และไซต์ WordPress ยอดนิยม
โชคดีที่ฉันสามารถแก้ปัญหาเหล่านี้และเรียนรู้อะไรมากมาย
แต่เดี๋ยวก่อน เช่นเดียวกับฉัน จะมีนักพัฒนาอีกหลายร้อยคนที่ประสบปัญหาคล้ายคลึงกันในการทำงานกับ WordPress และ WooCommerce
ดังนั้นฉันจึงตัดสินใจแบ่งปันบทเรียนกับผู้อื่น
และแพลตฟอร์มใดจะดีไปกว่าโอกาสในการพูดที่ WordCamp ที่ใหญ่ที่สุดในอินเดีย!
ปัญหาสามประการที่ทำให้ฉันนอนไม่หลับ (พร้อมวิธีแก้ไขและบทเรียนที่เรียนรู้จากพวกเขา)
สุดท้ายนี้ ปัญหาสามข้อที่ฉันกำลังพูดถึง เริ่มจากพวกเขาทีละคน
ลดเวลาในการโหลดหน้าเว็บจาก 3 นาทีเป็นมิลลิวินาที...
ปัญหา
ฉันเผชิญกับสถานการณ์ด้วยปลั๊กอิน Smart Coupons ซึ่งฟังก์ชันง่ายๆ ในการแสดงคูปองในหน้าสำคัญของร้านค้า (เช่น รถเข็น หน้าชำระเงิน และหน้าบัญชีของฉัน) ทำให้กระบวนการชำระเงินหยุดชะงัก
Smart Coupons เป็นปลั๊กอินสำหรับสร้างและจัดการคูปองและบัตรของขวัญจำนวนมากสำหรับร้านค้า WooCommerce
วิธีการแก้
ตอนนี้ การใช้ WP Query จะส่งผลให้มี JOIN หลายรายการ สำหรับการแสดงคูปองที่พร้อมใช้งานสำหรับผู้ใช้เฉพาะต้องมีการประเมินเงื่อนไขเมตาหลายรายการ
ดังนั้น แทนที่จะใช้วิธีค้นหาฐานข้อมูลในอุดมคติ เช่น WP Query ฉัน เขียน คำสั่ง SQL แบบกำหนดเอง

นอกจากนี้ ในการสืบค้นข้อมูลที่กำหนดเอง สิ่งที่ฉันทำคือ:
- แทนที่จะตรวจสอบเงื่อนไขเมตาทั้งหมดในแบบสอบถาม MySQL เดียว ฉันเพียงแค่ประเมิน เงื่อนไขเมตาแรก
- หลังจากนั้น ฉันเก็บรายการ post_ids (รหัสคูปอง) คั่นด้วยเครื่องหมายจุลภาคในตารางตัวเลือก
- จากนั้นฉันก็แมปลด post_ids ชุดเดียวกันโดยประเมินเงื่อนไขเมตาอื่น ๆ each
ฉันทำจนกระทั่งได้ post_ids ชุดสุดท้ายที่ต้องแสดงสำหรับผู้ใช้เฉพาะ

ปรับปรุงการแก้ปัญหา
วิธีนี้ช่วยแก้ปัญหาการโหลดหน้าเว็บได้ อย่างไรก็ตาม เพื่อให้หน้าเว็บโหลดได้ภายในไม่กี่วินาที ตามที่เพื่อนของเราแนะนำ ฉันต้องกำหนดปัญหาใหม่

แทนที่จะแสดงคูปองทั้งหมดที่ผู้ใช้มีสิทธิ์ได้รับ
ฉัน กำหนดขีดจำกัดจำนวนคูปอง ที่จะแสดงต่อผู้ใช้ในหน้ารถเข็นและชำระเงิน
ข้อผิดพลาดการหมดเวลากลายเป็นคุณสมบัติที่ขายดีที่สุดของปลั๊กอินของเราได้อย่างไร
ปัญหา
สำหรับการประมวลผลการอัปเดตฐานข้อมูลขนาดใหญ่มาก ฉันได้เขียนข้อความค้นหาที่กำหนดเองเนื่องจากการใช้ฟังก์ชันหลักของ WordPress อาจกลายเป็นค่าใช้จ่ายมหาศาล
ตัวอย่าง: หากต้องลดราคาของผลิตภัณฑ์ทั้งหมดในร้านค้าของตนลง 40% พวกเขาก็ต้องเลือก 'ราคา', 'ลดลง 40%' และกดปุ่มอัปเดต เป็นไปได้ง่ายโดยใช้ปลั๊กอิน Smart Manager ของเรา ซึ่งออกแบบมาเพื่อให้การอัปเดตจำนวนมากบนร้านค้า WooCommerce ของคุณง่ายขึ้น
แต่กระบวนการอัปเดตแบบกลุ่มเริ่มหยุดชะงักและทำให้เกิดข้อผิดพลาดการหมดเวลาเมื่อใดก็ตามที่มีคนพยายาม อัปเดตผลิตภัณฑ์ 1,000 รายการหรือทั้งร้านในคราว เดียว
ตอนแรกฉันเริ่มมองหาการเพิ่มประสิทธิภาพการสืบค้นข้อมูล แต่ก็ไม่ได้ผล
สถานการณ์ของฉันคล้ายกับผู้เข้าแข่งขันปราสาททาเคชิ พยายามเท่าไหร่ก็ยังตกน้ำ

วิธีการแก้
ว่ากันว่าบางครั้งคุณต้องออกจากปัญหาและ มอง ปัญหาเพื่อหาสาเหตุที่แท้จริง
ฉันทำแบบเดียวกันและพบว่าปัญหาที่แท้จริงคือ
ไม่ได้อยู่ที่ระดับการสืบค้นแต่อยู่ที่ระดับคำขอ
ดังนั้น สิ่งที่ฉันทำคือแทนที่จะเป็นคำขอเดียวที่ทำการอัปเดตทั้งหมด ฉันแยกการ เรียก AJAX ที่ต่อเนื่องกันหลาย ๆ ครั้ง ที่ทำการอัปเดตจำนวนน้อยลงและกำจัดข้อผิดพลาดการหมดเวลาโดยสิ้นเชิง

ปรับปรุงการแก้ปัญหา
ในตอนนี้ วิธีการแบ่งคำขอเดี่ยวออกเป็นคำขอ AJAX ที่มีขนาดเล็กกว่าหลายๆ คำขอ ไม่เพียงแต่แก้ไขข้อผิดพลาดการหมดเวลาเท่านั้น แต่ยัง ปรับปรุงการอัพเดตแบบกลุ่ม UX ด้วย
ขณะนี้ผู้จัดการร้านกำลังได้รับการอัปเดตเกี่ยวกับความคืบหน้าของการอัปเดต ซึ่งเพียงเพิ่มความมั่นใจในผลิตภัณฑ์
วิธีการเดียวกันนี้ทำให้ Smart Manager สามารถจัดการการอัปเดตแบบกลุ่มสำหรับร้านค้า WooCommerce ที่มีรูปร่างและขนาดใดก็ได้ และทำให้ Smart Manager กลายเป็นหนึ่งในปลั๊กอินที่ขายดีที่สุดของ StoreApps
สภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันบังคับให้เราเขียนปลั๊กอินใหม่อย่างไร
ปัญหา
สำหรับปลั๊กอินการรายงานใดๆ สิ่งสำคัญอย่างยิ่งคือการให้ข้อมูลสถิติที่แม่นยำไม่เพียงแต่อย่างรวดเร็ว ในตอนนี้ การรับสถิติการรายงานจำเป็นต้องมีการสืบค้นหลายรายการที่เกี่ยวข้องกับ การเข้าร่วมตาราง WordPress หลัก 2 ตาราง เช่น โพสต์และโพสต์เมตา

ตามที่เห็นข้างต้น JOIN มีราคาแพง มาก
ใน Smart Reporter (โซลูชันการรายงานของเราสำหรับ WooCommerce) เราแสดงสถิติการรายงานที่แตกต่างกัน 20 รายการในการดูหน้าเว็บเดียวและนั้นก็เช่นกันเมื่อโหลดหน้าเว็บ
วิธีการแก้
ดังนั้นฉันจึงปฏิบัติตามแนวทางเดียวกันกับที่โซลูชันการรายงานส่วนใหญ่ทำตาม ซึ่งก็คือ การสร้างตารางสรุป เช่น ตารางแบบกำหนดเองที่มีโครงสร้างเรียบ
ตารางนี้จะมีข้อมูลสรุปของข้อมูลทั้งหมดที่ปลั๊กอินต้องการ ดังนั้นจึงช่วยขจัดการใช้การรวมและปรับปรุงเวลาในการโหลดหน้าเว็บ

นอกจากนี้ เพื่อให้ตารางสรุปเหล่านี้อัปเดตอยู่เสมอ เราจึงใช้การดำเนินการและตัวกรองของ WordPress
สรุปบทเรียน
- ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดให้มากที่สุด
- ไม่มีคำถามในลูป
- หลีกเลี่ยงการรวมที่ซับซ้อนขนาดใหญ่
- ทำในระดับ MySQL ได้มากกว่าที่ระดับ PHP
- ลงลึกในโค้ด
- สรุป / กำหนดเอง / ตารางชั่วคราว
- ให้ความสนใจกับ UX – การตอบสนอง การแจ้งเตือน...
- คุณกำลังแก้ปัญหาที่ถูกต้องหรือไม่?
คุณเลือกอะไร
ฉันแน่ใจว่าคุณได้จัดการกับปัญหาใหญ่และพบวิธีแก้ไข แจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง มันจะมีค่ามากสำหรับผู้อ่าน