การปรับปรุง Cumulative Layout Shift ที่ Telegraph Media Group

ภายในไม่กี่เดือน เว็บไซต์ข่าวชั้นนำของสหราชอาณาจักรได้ปรับปรุง CLS เปอร์เซ็นไทล์ที่ 75 ขึ้น 250% จาก 0.25 เป็น 0.1

ความท้าทายด้านความเสถียรของภาพ

การเปลี่ยนเลย์เอาต์อาจรบกวนการใช้งานได้อย่างมาก ความเสถียรของภาพของ Telegraph Media Group (TMG) มีความสำคัญอย่างยิ่งเพราะผู้อ่านใช้แอปพลิเคชันของเราเพื่อรับข่าวสาร หากเลย์เอาต์เปลี่ยนขณะที่อ่านบทความ ผู้อ่านอาจสูญเสียตำแหน่งของเขาไป ซึ่งอาจเป็นประสบการณ์ที่น่าหงุดหงิดและรบกวนสมาธิ

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

ที่ TMG เรามีทีมหลายทีมที่มีส่วนร่วมในการเขียนโค้ดฝั่งไคลเอ็นต์ ซึ่งได้แก่

  • วิศวกรรมหลัก การนำโซลูชันของบุคคลที่สามไปใช้ในพื้นที่พลังงาน เช่น การแนะนำเนื้อหาและการแสดงความคิดเห็น
  • การตลาด ทำการทดสอบ A/B เพื่อประเมินว่าผู้อ่านโต้ตอบกับฟีเจอร์หรือการเปลี่ยนแปลงใหม่ๆ อย่างไร
  • การโฆษณา จัดการคำขอโฆษณาและโฆษณาการเสนอราคาล่วงหน้า
  • เรื่องบรรณาธิการ การฝังโค้ดภายในบทความ เช่น ทวีตหรือวิดีโอ รวมถึงวิดเจ็ตที่กำหนดเอง (เช่น เครื่องมือติดตามเคสไวรัสโคโรนา)

การดูแลให้แต่ละทีมไม่ทำให้เลย์เอาต์ของหน้าแสดงปัญหาอาจเป็นเรื่องยาก ด้วยการใช้เมตริก Cumulative Layout Shift เพื่อวัดว่าผู้อ่านเกิดขึ้นบ่อยเท่าใด ทีมก็ได้รับข้อมูลเชิงลึกมากขึ้นเกี่ยวกับประสบการณ์ของผู้ใช้จริงและเป้าหมายที่ชัดเจนที่จะต้องพยายามทำ ซึ่งทำให้ CLS ของเปอร์เซ็นไทล์ที่ 75 เพิ่มขึ้นจาก 0.25 เป็น 0.1 และที่เก็บข้อมูลที่ส่งเพิ่มขึ้นจาก 57% เป็น 72%

250%

การปรับปรุง CLS เปอร์เซ็นไทล์ที่ 75

15%

ผู้ใช้ที่มีคะแนน CLS ดีเพิ่มขึ้น

จุดเริ่มต้น

การใช้แดชบอร์ด CrUX ช่วยให้เราเห็นได้ว่าหน้าเว็บมีการเปลี่ยนแปลงมากกว่าที่เราต้องการ

แดชบอร์ด CrUX แสดงภาพที่ดีประมาณ 55-60%, ต้องปรับปรุง 15% และคะแนนไม่ดี 25%
คะแนน Cumulative Layout Shift ของเราระหว่างเดือนมิถุนายน 2020 ถึงกุมภาพันธ์ 2021

ตามหลักการแล้ว เราต้องการให้ผู้อ่านอย่างน้อย 75% ได้รับประสบการณ์ "ที่ดี" เราจึงเริ่มระบุสาเหตุของความไม่เสถียรของเลย์เอาต์

วิธีที่เราวัดการเปลี่ยนแปลงเลย์เอาต์

เราใช้ Chrome DevTools และ WebPageTest ร่วมกันในการระบุสาเหตุที่ทำให้เลย์เอาต์เปลี่ยนไป ในเครื่องมือสำหรับนักพัฒนาเว็บ เราใช้ส่วนประสบการณ์ของแท็บประสิทธิภาพเพื่อไฮไลต์อินสแตนซ์แต่ละรายการของเลย์เอาต์ที่มีการเปลี่ยนแปลงและผลลัพธ์ที่มีต่อคะแนนโดยรวม

หน้าแรกของ Telegraph ที่มีโฆษณาในส่วนหัวและมีการวางซ้อนสีฟ้า
การระบุการเปลี่ยนแปลงเลย์เอาต์ที่เกิดจากฝั่งไคลเอ็นต์การโหลดโฆษณาเหนือส่วนหัวโดยใช้ส่วนประสบการณ์ของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

WebPageTest จะช่วยไฮไลต์จุดที่มีการเปลี่ยนแปลงเลย์เอาต์ในมุมมองไทม์ไลน์เมื่อเลือก "ไฮไลต์ Layout Shift" ไว้

มุมมองแถบฟิล์ม WebPageTest ของเว็บไซต์ Telegraph ที่ไฮไลต์เลย์เอาต์ชิฟท์ด้วยสีแดง
WebPageTest ที่ไฮไลต์ตำแหน่งที่เลย์เอาต์เปลี่ยน

หลังจากตรวจสอบแต่ละการเปลี่ยนแปลงของเทมเพลตที่เข้าชมบ่อยที่สุดแล้ว เราจึงมี รายการแนวคิดที่จะปรับปรุงให้ดีขึ้นได้

การลดการเปลี่ยนเลย์เอาต์

เรามุ่งเน้นที่ 4 ด้านที่เราสามารถลดการเปลี่ยนแปลงเลย์เอาต์ได้ - โฆษณา - รูปภาพ - ส่วนหัว - การฝัง

โฆษณา

โฆษณาจะโหลดหลังจากการแสดงผลครั้งแรกผ่าน JavaScript บางคอนเทนเนอร์ที่โหลดมาไม่ได้มีความสูงที่สงวนไว้

ภาพเคลื่อนไหวของเว็บไซต์ Telegraph รายการเรื่องราวจะถูกเลื่อนออกไปเมื่อโฆษณาโหลดขึ้นด้านบน
บล็อก "เรื่องราวอื่นๆ" ด้านล่างโฆษณาจะลดน้อยลงหลังจากที่โฆษณาโหลด

แม้เราจะไม่ทราบความสูงที่แน่ชัด แต่เราก็สามารถจองพื้นที่ได้โดยใช้ขนาดโฆษณาที่ใช้กันมากที่สุดที่โหลดในช่อง

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

เราตัดสินความสูงเฉลี่ยของโฆษณาผิดในบางกรณี สำหรับผู้อ่านแท็บเล็ต ช่องกำลังยุบอยู่

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

เราได้ตรวจสอบช่องโฆษณาอีกครั้งและปรับความสูงโดยใช้ขนาดที่ใช้กันมากที่สุด

ภาพเคลื่อนไหวของมุมมองแท็บเล็ตของเว็บไซต์ Telegraph เมื่อใช้ตัวยึดตำแหน่งที่ตรงกับขนาดโฆษณา จะไม่มี Layoutshift เมื่อโหลดโฆษณา
ตรวจสอบว่าพื้นที่ที่เราจองไว้สำหรับช่องโฆษณาตรงกับความสูงที่แสดงบ่อยที่สุดของโฆษณา

รูปภาพ

รูปภาพจำนวนมากในเว็บไซต์โหลดแบบ Lazy Loading และสงวนพื้นที่ไว้สําหรับรูปภาพเหล่านั้น

ภาพเคลื่อนไหวของกำลังโหลดการ์ดตัวอย่างบทความ
การโหลดรูปภาพแบบ Lazy Loading โดยไม่ขัดจังหวะเลย์เอาต์

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

ภาพเคลื่อนไหวของการโหลดหน้าเว็บบทความ ข้อความจะเลื่อนลงเมื่อรูปภาพหลักโหลดขึ้นที่ด้านบนของหน้า
การเปลี่ยนเลย์เอาต์ที่เกิดจากรูปภาพหลักของบทความ

เพียงแค่เพิ่มแอตทริบิวต์ความกว้างและความสูงลงในรูปภาพก็ช่วยให้เลย์เอาต์ไม่เลื่อนได้

ภาพเคลื่อนไหวของหน้าบทความที่กำลังโหลดโดยมีตัวยึดตำแหน่งที่สงวนไว้สำหรับรูปภาพหลัก เมื่อรูปภาพหลักโหลดที่ด้านบนของหน้า จะไม่มีการเปลี่ยนแปลงเลย์เอาต์
การโหลดรูปภาพบทความหลักโดยไม่ทำให้เลย์เอาต์เปลี่ยน

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

ALT_TEXT_HERE
ส่วนหัวของหน้าโหลดเองไม่ได้

การย้ายส่วนหัวไปไว้ที่ด้านบนของมาร์กอัปทำให้หน้าแสดงผลได้โดยไม่ต้องมีการเปลี่ยนแปลงนี้

ALT_TEXT_HERE
ส่วนหัวของการโหลดหน้าเว็บไม่ขัดจังหวะเลย์เอาต์อีกต่อไป

การฝัง

การฝังที่ใช้บ่อยบางรายการมีสัดส่วนภาพที่กำหนดไว้ เช่น วิดีโอ YouTube ขณะที่โปรแกรมเล่นโหลด เราจะดึงภาพขนาดย่อจาก YouTube และใช้เป็นตัวยึดตําแหน่งขณะวิดีโอโหลด

ช่องโปรแกรมเล่นวิดีโอโหลดภาพขนาดย่อความละเอียดต่ำขณะโหลดวิดีโอเพลเยอร์
ช่องโปรแกรมเล่นวิดีโอกำลังโหลดภาพขนาดย่อความละเอียดต่ำขณะโปรแกรมเล่นวิดีโอโหลด

การวัดผลกระทบ

เราสามารถวัดผลกระทบในระดับฟีเจอร์ได้อย่างง่ายดายโดยใช้เครื่องมือที่กล่าวถึงในตอนต้นของบทความ อย่างไรก็ตาม เราต้องการวัด CLS ทั้งในระดับเทมเพลตและระดับเว็บไซต์ เราใช้ SpeedCurve เพื่อตรวจสอบการเปลี่ยนแปลงทั้งในขั้นตอนก่อนและเวอร์ชันที่ใช้งานจริง

แผนภูมิ SpeedCurve แสดงคะแนน CLS ที่ลดลงอย่างมาก
การติดตามความคืบหน้าของ CLS โดยการสังเคราะห์โดยใช้ SpeedCurve

จากนั้นเราจะสามารถตรวจสอบผลลัพธ์ในข้อมูล RUM ของเรา (ระบุโดย mPulse) เมื่อโค้ดถึงเวอร์ชันที่ใช้งานจริง

แผนภูมิ mPulse แสดงคะแนน CLS ที่ลดลง
การตรวจสอบการปรับปรุง CLS ทั้งเว็บไซต์ด้วยข้อมูล mPulse RUM ก่อนและหลังทำการเปลี่ยนแปลง

การตรวจสอบข้อมูล RUM ช่วยให้เรามั่นใจว่าการเปลี่ยนแปลงที่เราทำจะส่งผลดีต่อผู้อ่านของเรา

ตัวเลขสุดท้ายที่เราตรวจสอบเป็นข้อมูล RUM ที่ Google รวบรวม ซึ่งถือเป็นเรื่องเกี่ยวข้องอย่างมากในตอนนี้ เนื่องจากจะส่งผลต่อการจัดอันดับหน้าเว็บในเร็วๆ นี้ สำหรับผู้เริ่มต้น เราใช้รายงาน UX ของ Chrome ทั้งในข้อมูลระดับต้นทางรายเดือนที่พร้อมใช้งานผ่านแดชบอร์ด CrUX และการค้นหา BigQuery เพื่อดึงข้อมูล p75 ในอดีต วิธีนี้ช่วยให้เราเห็นได้ง่ายว่าสำหรับการเข้าชมทั้งหมดที่วัดโดย CrUX CLS เปอร์เซ็นไทล์ที่ 75 ของเราเพิ่มขึ้น 250% จาก 0.25 เป็น 0.1 และที่เก็บข้อมูลที่ส่งเพิ่มขึ้นจาก 57% เป็น 72%

แดชบอร์ด CrUX ที่แสดง p75 CLS สำหรับ Telegraph.co.uk คือ 0.1
ผลลัพธ์จากหน้าแดชบอร์ด Crux
BigQuery แสดงค่า p75 ที่เพิ่มขึ้นแบบเดือนต่อเดือนจาก 0.25 ถึง 0.1
การเรียกใช้ BigQuery ที่แสดงค่า p75 ของปี 2021 จนถึงปัจจุบัน

นอกจากนี้ เรายังใช้ Chrome UX Report API และสร้างแดชบอร์ดภายในที่แยกออกเป็นเทมเพลตได้อีกด้วย

แดชบอร์ดภายในแสดงคะแนนที่ดีโดยเฉลี่ยอยู่ที่ 76.2 คะแนน ต้องปรับปรุงอีก 9.3 คะแนน และคะแนนต่ำอยู่ที่ 14.6 คะแนน
แดชบอร์ดภายในที่ใช้ Chrome UX Report API โดยไฮไลต์คะแนนเฉลี่ยและหน้าเว็บที่มีประสิทธิภาพแย่ที่สุดเมื่อใช้เทมเพลตนั้น

การหลีกเลี่ยง CLS การถดถอย

องค์ประกอบสำคัญของการปรับปรุงประสิทธิภาพคือการหลีกเลี่ยงความถดถอย เราได้กำหนดงบประมาณด้านประสิทธิภาพพื้นฐานบางรายการสำหรับเมตริกหลักและรวม CLS ไว้ในเมตริกเหล่านั้น

แดชบอร์ดงบประมาณด้านประสิทธิภาพซึ่งแสดงการตรวจสอบสังเคราะห์ที่วัดผล CLS ในเทมเพลตที่มีการเข้าชมสูงบางรายการ ปัจจุบันงบประมาณตั้งไว้ที่ 0.025

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

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

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

บทสรุป

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

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