เว็บไซต์ของ Lowe's เป็นหนึ่งในเว็บไซต์อีคอมเมิร์ซที่มีประสิทธิภาพเร็วที่สุด

ด้วยการสร้างระบบการทดสอบและตรวจสอบประสิทธิภาพอัตโนมัติ การทดสอบทีมความเร็วไซต์ของ Lowe's Site Speed จะดึงคำขอเทียบกับงบประมาณด้านประสิทธิภาพ และป้องกันไม่ให้ประสิทธิภาพที่ถดถอยนำไปใช้ได้จริง

Abhimanyu Raibahadur
Abhimanyu Raibahadur
Ashish Choudhury
Ashish Choudhury
Dhilip venkatesh Uvarajan
Dhilip venkatesh Uvarajan
Dinakar Chandolu
Dinakar Chandolu
Safwan Samla
Safwan Samla

Lowe's เป็นร้านจำหน่ายอุปกรณ์ซ่อมแซมบ้านเกือบ 9 หมื่นล้านดอลลาร์ ที่เปิดร้านค้าประมาณ 2,200 ร้านและมีพนักงานมากกว่า 300,000 คน ด้วยการสร้างระบบการทดสอบและตรวจสอบอัตโนมัติที่ป้องกันไม่ให้ประสิทธิภาพการทำงานถดถอยนำไปใช้ในเวอร์ชันที่ใช้งานจริงได้ ทีม Site Speed ของ Lowe ก็สามารถปรับปรุงประสิทธิภาพเว็บไซต์ของตัวเอง โดยติดอันดับเว็บไซต์ค้าปลีกยอดนิยมได้

ปัญหา

เป้าหมายของทีมความเร็วไซต์คือการทำให้ไซต์ Lowe's เป็นหนึ่งในไซต์อีคอมเมิร์ซที่เร็วที่สุดในแง่ของประสิทธิภาพการโหลดหน้าเว็บ ก่อนที่จะสร้างระบบการทดสอบและตรวจสอบอัตโนมัติ นักพัฒนาเว็บไซต์ของ Lowe สามารถวัดประสิทธิภาพโดยอัตโนมัติในสภาพแวดล้อมก่อนการผลิตไม่ได้ เครื่องมือที่มีอยู่จะทำการทดสอบในสภาพแวดล้อมที่ใช้งานจริงเท่านั้น ด้วยเหตุนี้ เวอร์ชันที่ด้อยกว่าจึงถูกนำไปใช้งานจริง ทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี บิลด์ที่ด้อยกว่าเหล่านี้จะยังคงอยู่ในเวอร์ชันที่ใช้งานจริงจนกว่าทีมความเร็วไซต์จะตรวจพบและเปลี่ยนกลับโดยผู้เขียน

โซลูชัน

ทีมความเร็วไซต์ใช้เครื่องมือโอเพนซอร์สในการสร้างระบบการทดสอบและตรวจสอบประสิทธิภาพแบบอัตโนมัติสำหรับสภาพแวดล้อมก่อนใช้งานจริง ระบบจะวัดประสิทธิภาพของคำขอพุล (PR) ทั้งหมดและกำหนดเป้าหมาย PR จากการจัดส่งไปยังเวอร์ชันที่ใช้งานจริงหากไม่เป็นไปตามงบประมาณด้านประสิทธิภาพและเกณฑ์เมตริกของทีมความเร็วเว็บไซต์ นอกจากนี้ ระบบจะวัดการปฏิบัติตามข้อกำหนดของ SEO และ ADA ด้วย

มีอิทธิพล

จากตัวอย่างทีม 1 ทีมในช่วง 16 สัปดาห์ที่ใช้บิลด์ 102 บิลด์ ระบบทดสอบและตรวจสอบประสิทธิภาพอัตโนมัติได้ป้องกันไม่ให้บิลด์ 32 รายการที่มีประสิทธิภาพต่ำกว่ามาตรฐานเข้าสู่เวอร์ชันที่ใช้งานจริง

จากที่เคยใช้เวลา 3 ถึง 5 วันในการแจ้งให้นักพัฒนาซอฟต์แวร์ทราบว่าทีมได้ดำเนินการปรับปรุงประสิทธิภาพในการทำงานจริง ตอนนี้ระบบแจ้งให้นักพัฒนาซอฟต์แวร์ทราบถึงปัญหาด้านประสิทธิภาพโดยอัตโนมัติภายใน 5 นาทีหลังจากส่งคำขอพุลในสภาพแวดล้อมก่อนการผลิต

คุณภาพของโค้ดจะค่อยๆ เพิ่มขึ้นเมื่อเวลาผ่านไป โดยวัดจากข้อเท็จจริงที่ว่ามีการแจ้งว่าคำขอพุลน้อยลงเนื่องจากประสิทธิภาพถดถอย ทีมความเร็วไซต์กำลังค่อยๆ ปรับลดงบประมาณในการกำกับดูแลเพื่อปรับปรุงคุณภาพเว็บไซต์อย่างต่อเนื่อง

โดยทั่วไปแล้ว การมีการเป็นเจ้าของโค้ดที่เป็นปัญหาอย่างชัดเจนได้เปลี่ยนวัฒนธรรมวิศวกร แทนที่จะยินดีกับการแก้ไขในเชิงรับเนื่องจากไม่ทราบแน่ชัดว่าใครเป็นผู้นำเสนอปัญหา ทีมสามารถทำการเพิ่มประสิทธิภาพเชิงรุกโดยให้การเป็นเจ้าของโค้ดที่เป็นปัญหาระบุแหล่งที่มาได้อย่างเป็นกลาง

การใช้งาน

หัวใจของแอปการกำกับดูแลความเร็วไซต์ (SSG) คือ Lighthouse CI แอป SSG ใช้ Lighthouse เพื่อตรวจสอบประสิทธิภาพของหน้าเว็บของคำขอพุลทุกรายการ

แผนภาพกระบวนการของแอป SSG ซึ่งอธิบายขั้นตอนที่แสดงในแผนภาพภายหลังของบทความ

แอป SSG จะทำให้การสร้างล้มเหลวหากไม่สามารถเข้าถึงงบประมาณด้านประสิทธิภาพและเป้าหมายเมตริกที่ทีมความเร็วเว็บไซต์กำหนดไว้ โดยไม่เพียงแค่เพิ่มประสิทธิภาพการโหลด แต่รวมถึง SEO, PWA และการช่วยเหลือพิเศษด้วย นอกจากนี้ยังรายงานสถานะให้ผู้เขียน ผู้ตรวจสอบ และทีม SRE ทราบได้ทันที นอกจากนี้ยังสามารถกำหนดค่าให้ข้ามการตรวจสอบเมื่อต้องมีข้อยกเว้นได้ด้วย

ขั้นตอนของกระบวนการกำกับดูแลความเร็วอัตโนมัติ (ASG)

Spinnaker

จุดเริ่มต้น นักพัฒนาซอฟต์แวร์ผสานรวมโค้ดเข้ากับสภาพแวดล้อมก่อนใช้งานจริง

  1. ทำให้สภาพแวดล้อมก่อนใช้งานจริงใช้งานได้ด้วยเนื้อหา CDN
  2. ตรวจสอบว่าติดตั้งใช้งานสำเร็จ
  3. เรียกใช้คอนเทนเนอร์ Docker เพื่อเริ่มสร้างแอปพลิเคชัน ASG หรือส่งการแจ้งเตือน (ในกรณีที่การติดตั้งใช้งานล้มเหลว)

Jenkins และ Lighthouse

  1. สร้างแอปพลิเคชัน ASG กับ Jenkins
  2. เรียกใช้คอนเทนเนอร์ Docker ที่กำหนดเองซึ่งติดตั้ง Chrome และ Lighthouse แล้ว ดึง lighthouserc.json จากแอป SSG แล้วเรียกใช้ lhci autorun --collect-url=https://example.com

แอป Jenkins และ SSG

  1. ดึงข้อมูล assertion-results.json จาก lhci แล้วเปรียบเทียบกับงบประมาณที่กำหนดไว้ล่วงหน้าใน budgets.json บันทึกเอาต์พุตเป็นไฟล์ข้อความและอัปโหลดไปยัง Nexus เพื่อการเปรียบเทียบในอนาคต
  2. เปรียบเทียบ assertion-results.json ปัจจุบันกับบิลด์ล่าสุดที่ประสบความสำเร็จ (ดาวน์โหลดจาก Nexus) และบันทึกเป็นไฟล์ข้อความ
  3. สร้างอีเมล HTML ที่มีข้อมูลความสำเร็จหรือล้มเหลว
  4. ส่งอีเมลไปยังรายชื่อการส่งอีเมลที่เกี่ยวข้องพร้อมด้วย Jenkins