การพัฒนา Cumulative Layout Shift ในเครื่องมือเว็บ

ตั้งแต่วันนี้เป็นต้นไป การเปลี่ยนแปลง CLS ได้เริ่มใช้งานในแพลตฟอร์มเครื่องมือทางเว็บของ Chrome หลายแพลตฟอร์ม ซึ่งรวมถึง Lighthouse, PageSpeed Insights และรายงาน UX ของ Chrome

Addy Osmani
Addy Osmani
Elizabeth Sweeny
Elizabeth Sweeny

เผยแพร่เมื่อวันที่ 2 มิถุนายน 2021

วันนี้เราขอแชร์วิธีที่เราพัฒนาการวัดเมตริกการเปลี่ยนเลย์เอาต์แบบสะสม (CLS) ในแพลตฟอร์มเครื่องมือทางเว็บของ Chrome สําหรับนักพัฒนาซอฟต์แวร์ การเปลี่ยนแปลงเหล่านี้จะแสดงถึงประสบการณ์ของผู้ใช้หน้าเว็บที่มีอายุยาวนานได้ดีขึ้น (เช่น หน้าเว็บที่มีการเลื่อนได้ไม่รู้จบหรือแอปหน้าเว็บเดียว) การอัปเดต CLS เหล่านี้จะเปิดตัวในเครื่องมือต่างๆ ซึ่งรวมถึง Lighthouse, PageSpeed Insights และรายงาน UX ของ Chrome

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

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

ตามที่ได้ประกาศไว้ในการพัฒนาเมตริก CLS เราจะปรับเมตริก CLS เป็นกรอบเวลาเซสชันสูงสุดซึ่งมีช่องว่าง 1 วินาที สูงสุดไม่เกิน 5 วินาที การอัปเดตนี้แสดงถึงประสบการณ์ของผู้ใช้สำหรับหน้าเว็บที่มีอายุการใช้งานยาวนานได้ดีขึ้น เมื่อใช้การเปลี่ยนแปลงนี้ ต้นทาง 70% จะไม่พบการเปลี่ยนแปลง CLS ที่เปอร์เซ็นต์ไทล์ 75 และต้นทางที่เหลือ 30% จะเห็นว่ามีการปรับปรุง

การเปิดตัวการปรับกรอบเวลาใน CLS

เราได้พูดถึงคำจำกัดความ CLS ที่อัปเดตแล้ว ซึ่งเป็นกรอบเวลาเซสชันสูงสุดซึ่งมีช่องว่าง 1 วินาที สูงสุดไม่เกิน 5 วินาที การเปลี่ยนแปลงนี้ส่งผลต่อเครื่องมืออย่างไร

ตั้งแต่วันนี้เป็นต้นไป การเปลี่ยนแปลงที่เกิดขึ้นกับ CLS ได้เปิดตัวในแพลตฟอร์มเครื่องมือเว็บของ Chrome หลายแพลตฟอร์ม ซึ่งรวมถึง Lighthouse, PageSpeed Insights และรายงาน UX ของ Chrome ดูสรุปการเปิดตัวการปรับกรอบเวลา CLS ได้ที่ด้านล่าง รวมถึงเครื่องมือที่ยังคงสามารถเปรียบเทียบกับการติดตั้งใช้งานเดิมได้

เครื่องมือ การปรับกรอบเวลา CLS "เผยแพร่อยู่" ความพร้อมใช้งาน CLS "แบบเก่า"
แผงเครื่องมือสำหรับนักพัฒนาเว็บของ Lighthouse ช่อง Canary, 2 มิถุนายน 2021 ไม่มี
Lighthouse CLI v8 เผยแพร่เมื่อวันที่ 1 มิถุนายน 2021 มีให้บริการเป็น totalCumulativeLayoutShift ใน Lighthouse v8
CI ของ Lighthouse v0.7.3, 3 มิถุนายน 2021 ไม่มี
PageSpeed Insights (PSI) 1 มิถุนายน 2021 NA
PSI API 1 มิถุนายน 2021 มีให้บริการใน lighthouseResult เป็น totalCumulativeLayoutShift ไม่พร้อมใช้งานในฟิลด์ข้อมูล loadingExperience
รายงาน UX ของ Chrome (CrUX) - BigQuery ชุดข้อมูล 202105 เผยแพร่เมื่อวันที่ 8 มิถุนายน 2021 พร้อมใช้งานเป็น experimental.uncapped_cumulative_layout_shift จนถึง 202111
รายงาน UX ของ Chrome (CrUX) - API 1 มิถุนายน 2021 หลังจากวันที่ 1 มิถุนายน 2021 เป็นต้นไป คุณจะดูรายการต่อไปนี้ได้ experimental_uncapped_cumulative_layout_shift 14 ธันวาคม 2021

นอกจากนี้ เราจะอัปเดตเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome เพื่อรองรับการปรับกรอบเวลาในเร็วๆ นี้ด้วย การอัปเดตเป็น CLS ก็ได้มีใน Search Console แล้วเช่นกัน ซึ่งจะมีผลตั้งแต่วันที่ 1 มิถุนายน 2021 เป็นต้นไป

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

CLS "เก่า"

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

ใน Lighthouse v8 มีให้บริการใน JSON เป็น audits['cumulative-layout-shift'].details.items[0].totalCumulativeLayoutShift

คุณจะเห็นค่านี้ใน experimental_uncapped_cumulative_layout_shift ใน CrUX API และ experimental.uncapped_cumulative_layout_shift ใน CrUX BigQuery

หลังจากวันที่ 1 มิถุนายน คําขอ CrUX API จะแสดงเมตริก "CLS แบบเก่า" ดังนี้

{
  "origin": "https://web.dev",
  "metrics": [
    "experimental_uncapped_cumulative_layout_shift"
  ]
}

หลังจากวันที่ 8 มิถุนายน CrUX BigQuery ต่อไปนี้จะเปรียบเทียบ CLS เก่าและใหม่

WITH
  new_data AS (
  SELECT
    cls
  FROM
    `chrome-ux-report.all.202105`,
    UNNEST(layout_instability.cumulative_layout_shift.histogram.bin) AS cls
  WHERE
    origin = 'https://web.dev'
    AND effective_connection_type.name = '4G'
    AND form_factor.name = 'phone'),
  old_data AS (
  SELECT
    uncapped_cls
  FROM
    `chrome-ux-report.all.202105`,
    UNNEST(experimental.uncapped_cumulative_layout_shift.histogram.bin) AS uncapped_cls
  WHERE
    origin = 'https://web.dev'
    AND effective_connection_type.name = '4G'
    AND form_factor.name = 'phone')
SELECT
  cls.start AS start,
  cls.`END` AS `end`,
  cls.density AS cls_density,
  uncapped_cls.density AS uncapped_cls_density
FROM
  new_data
INNER JOIN
  old_data
ON
  new_data.cls.start = old_data.uncapped_cls.start

คุณจะยังใช้ข้อมูลนี้ได้ต่อไปเป็นเวลาสูงสุด 6 เดือน โดยเราจะหยุดให้บริการ "CLS เดิม" ในวันที่ 14 ธันวาคม 2021

การอัปเดตน้ำหนักของ CLS ใน Lighthouse

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

ตอนนี้หลังจากที่นักพัฒนาซอฟต์แวร์ได้ใช้งานไประยะหนึ่งแล้ว คะแนน Lighthouse ได้เพิ่มน้ำหนักของ CLS จาก 5% เป็น 15% ซึ่งสอดคล้องกับวิธีการที่มี Core Web Vitals เป็นเมตริกที่มีน้ำหนักมากที่สุดในคะแนน Lighthouse

คุณดูน้ำหนักที่อัปเดตแล้วของเมตริกใน Lighthouse v8 ได้ในเครื่องคำนวณคะแนน

เครื่องคำนวณคะแนน Lighthouse

การติดตั้งใช้งาน CLS ของ Lighthouse 8.0 ประกอบด้วยทั้งการแบ่งกรอบเวลาและการมีส่วนร่วมของ CLS จากเฟรมย่อย ก่อนหน้าเวอร์ชัน 8.0 นั้น CLS ใน Lighthouse ไม่ได้รวม CLS ของเฟรมย่อยในการคำนวณเมตริก แต่ตอนนี้ได้รวม CLS ไว้แล้ว ขอยืนยันอีกครั้งว่า CLS ของช่องที่ CrUX วัดจะจัดการกับกรอบหน้าต่างและเฟรมย่อยในลักษณะเดียวกันด้วย

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

การวัดในพื้นที่ด้วยตนเอง

หากต้องการวัดการติดตั้งใช้งาน CLS ล่าสุด คุณยังบันทึกข้อมูลนี้สําหรับข้อมูลภาคสนามผ่าน RUM ได้ด้วยโดยใช้ข้อมูลโค้ด PerformanceObserver ต่อไปนี้

หรือจะใช้ไลบรารี JavaScript ของ Web Vitals โดยตรงก็ได้ ซึ่งก็ได้รับการอัปเดตด้วยการเปลี่ยนแปลงนี้เช่นกัน

การอัปเดตเพิ่มเติม

นอกจากการอัปเดตการเปลี่ยนแปลงเลย์เอาต์แบบสะสมแล้ว เรายังได้ทำการอัปเดตเครื่องมือทางเว็บที่เกี่ยวข้องกับเมตริกต่อไปนี้ด้วย

  • เรากําลังอัปเดตคําจํากัดความล่าสุดของเมตริก Largest Contentful Paint CrUX API, PSI, PSI API, Search Console จะอัปเดตในวันที่ 1 มิถุนายน 2021 CrUX BigQuery จะอัปเดตในวันที่ 8 มิถุนายน 2021
  • ใน CrUX เกณฑ์การจัดกลุ่ม 3 กลุ่มของ First Contentful Paint ได้รับการอัปเดตเป็น "ดี: [0-1.8 วินาที] ต้องปรับปรุง: (1.8-3 วินาที) แย่: [3 วินาที-∞]"

สรุป

เราคาดว่าการเปลี่ยนแปลงนี้จะทําให้เว็บไซต์ส่วนใหญ่เปลี่ยนผ่านได้อย่างราบรื่น และขอแนะนําให้คุณดูเคล็ดลับเกี่ยวกับวิธีวัดและเพิ่มประสิทธิภาพการเปลี่ยนเลย์เอาต์ใน Web Vitals และ Optimize CLS และเช่นเคย โปรดติดต่อเราที่กลุ่ม web-vitals-feedback เพื่อแสดงความคิดเห็นเกี่ยวกับเมตริกและฟอรัมความคิดเห็นเกี่ยวกับเครื่องมือสำหรับ Lighthouse และรายงาน UX ของ Chrome เพื่อแจ้งปัญหาเกี่ยวกับเครื่องมือ ขอแสดงความนับถือ

ขอขอบคุณ Johannes Henkel, Rick Viscomi, Vivek Sekhar, Rachel Andrew, Milica Mihajlija, Jeff Jose และ Paul Irish สำหรับความคิดเห็น

รูปภาพหลักโดย Barn Images / @barnimages ใน Unsplash