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

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

การตรวจสอบเวลาในการวาดภาพในหน้าเว็บของคุณ

คุณสังเกตเห็นว่าหน้าเว็บเลื่อนได้ไม่ลื่นไหล นี่คือวิธีที่คุณจะเริ่มจัดการกับปัญหา สำหรับตัวอย่าง เราจะใช้หน้าเดโม Things We Left On The Moon โดย Dan Cederholm เป็นตัวอย่าง

คุณเปิดเครื่องมือตรวจสอบเว็บ เริ่มบันทึกไทม์ไลน์ และเลื่อนหน้าเว็บขึ้นและลง จากนั้นดูที่เส้นควบคุมเวลาแนวตั้ง ซึ่งจะแสดงสิ่งที่เกิดขึ้นในแต่ละเฟรม

ภาพหน้าจอการบันทึกไทม์ไลน์

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

ภาพหน้าจอของไทม์ไลน์ของการวาดภาพ

มีเหตุผลที่ Chrome ปรับสีพื้นที่ของหน้าเว็บใหม่ดังนี้

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

ในฐานะนักพัฒนาซอฟต์แวร์ คุณจำเป็นต้องตระหนักถึงการทาสีใหม่ที่เกิดขึ้นในหน้าเว็บของคุณ การมองที่สี่เหลี่ยมสีเป็นวิธีที่ดี ในภาพหน้าจอตัวอย่างด้านบน คุณจะเห็นว่าทั้งหน้าจอถูกบังด้วยสี่เหลี่ยมผืนผ้าใหญ่สี ซึ่งหมายความว่าทั้งหน้าจอจะปรับสีใหม่ขณะที่คุณเลื่อน ซึ่งไม่ใช่ผลดีแต่อย่างใด ในกรณีนี้ ปัญหานี้เกิดจากสไตล์ CSS background-attachment:fixed ซึ่งทำให้ภาพพื้นหลังของหน้าอยู่ที่ตำแหน่งเดียวกันขณะที่เนื้อหาของหน้าเว็บย้ายไปอยู่ด้านบนเมื่อคุณเลื่อน

หากคุณระบุว่าการทาสีใหม่ครอบคลุมพื้นที่ขนาดใหญ่และ/หรือใช้เวลานาน คุณจะมี 2 ตัวเลือก ได้แก่

  1. คุณอาจลองเปลี่ยนเลย์เอาต์ของหน้าเพื่อลดปริมาณการแสดงผล หากเป็นไปได้ Chrome จะแสดงหน้าเว็บที่มองเห็นได้เพียงครั้งเดียวและเพิ่มส่วนที่มองไม่เห็นเมื่อคุณเลื่อนลง อย่างไรก็ตาม ก็มีบางกรณีที่ Chrome จำเป็นต้องทาสีพื้นที่บางส่วนใหม่ ตัวอย่างเช่น กฎ CSS position:fixed ซึ่งมักใช้สำหรับองค์ประกอบการนำทางที่อยู่ในตำแหน่งเดิม ก็อาจทำให้เกิดการวาดใหม่เหล่านี้ได้
  2. หากต้องการรักษาเลย์เอาต์ของหน้าเว็บไว้ ให้ลองลดค่าใช้จ่ายในการทาสีพื้นที่ที่มีการทาสีใหม่ สไตล์ CSS แต่ละแบบจะมีค่าใช้จ่ายในการวาดภาพไม่เหมือนกัน บางสไตล์ให้ผลกระทบน้อย บางสไตล์ก็มีคุณค่ามาก การคิดหาค่าใช้จ่ายในการทาสีบางสไตล์อาจเป็นงานหนัก ซึ่งทำได้โดยการสลับรูปแบบในแผงองค์ประกอบ แล้วดูความแตกต่างในการบันทึกไทม์ไลน์ ซึ่งหมายถึงการสลับแผงและทำการบันทึกจำนวนมาก ซึ่งเป็นเวลาที่โหมดการวาดภาพต่อเนื่องจะเข้ามามีบทบาท

โหมดการวาดภาพต่อเนื่อง

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

ตั้งค่า

หากต้องการใช้โหมดการวาดภาพต่อเนื่อง คุณต้องใช้ Chrome Canary

ในระบบ Linux (และ Mac บางรุ่น) คุณต้องตรวจสอบว่า Chrome ทำงานในโหมดการเขียนองค์ประกอบ คุณเปิดใช้การตั้งค่านี้อย่างถาวรได้โดยใช้การตั้งค่า GPU Compositing ในทุกหน้าใน about:flags

วิธีการเริ่มต้น

คุณเปิดใช้โหมดการวาดภาพต่อเนื่องได้ผ่านช่องทำเครื่องหมายเปิดใช้การทาสีหน้าแบบต่อเนื่องอีกครั้งในการตั้งค่าของเครื่องมือตรวจสอบเว็บ (ไอคอนฟันเฟืองที่มุมขวาล่างของเครื่องมือตรวจสอบเว็บ)

โหมดการวาดภาพต่อเนื่อง

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

  • เวลาการแสดงผลล่าสุดทางด้านซ้าย
  • ค่าต่ำสุดและสูงสุดของกราฟปัจจุบันทางด้านขวา
  • แผนภูมิแท่งแสดงประวัติของ 80 เฟรมสุดท้ายที่ด้านล่าง (เส้นในแผนภูมิระบุว่าเป็นจุดอ้างอิง 16 มิลลิวินาที)

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

ขั้นตอนการทำงาน

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

  1. เปิดการตั้งค่าของเครื่องมือตรวจสอบเว็บ แล้วเลือกเปิดใช้การวาดภาพหน้าอย่างต่อเนื่อง
  2. ไปที่แผง "องค์ประกอบ" และข้ามแผนผัง DOM ด้วยปุ่มลูกศรหรือโดยการเลือกองค์ประกอบในหน้า
  3. ใช้แป้นพิมพ์ลัด H ซึ่งเป็นตัวช่วยที่เพิ่งเพิ่มเข้ามาใหม่เพื่อเปิด/ปิดการแสดงองค์ประกอบ
  4. ดูที่กราฟเวลาระบายสี แล้วลองมองหาองค์ประกอบที่เพิ่มเวลาในการวาดภาพนานๆ
  5. ตรวจสอบรูปแบบ CSS ขององค์ประกอบนั้น สลับเปิดและปิดขณะดูกราฟเพื่อค้นหารูปแบบที่ทำให้กราฟช้าลง
  6. โปรดเปลี่ยนสไตล์นี้และบันทึกไทม์ไลน์อีกครั้งเพื่อดูว่าวิธีนี้ทำให้หน้าเว็บมีประสิทธิภาพดีขึ้นหรือไม่

ภาพเคลื่อนไหวด้านล่างแสดงการสลับรูปแบบและผลกระทบต่อเวลาระบายสี

Screencast สีต่อเนื่อง

ตัวอย่างนี้แสดงให้เห็นว่าการปิดใช้รูปแบบ CSS box-shadow หรือ border-radius อย่างใดอย่างหนึ่งช่วยลดเวลาในการแสดงผลได้อย่างมาก การใช้ทั้ง box-shadow และ border-radius ในองค์ประกอบหนึ่งจะทำให้มีการดำเนินการวาดภาพที่มีราคาแพงมาก เนื่องจาก Chrome เพิ่มประสิทธิภาพให้สิ่งนี้ไม่ได้ ดังนั้น หากคุณมีองค์ประกอบที่มีการทาสีใหม่จำนวนมากอย่างเช่นในตัวอย่าง คุณควรหลีกเลี่ยงชุดค่าผสมนี้

Notes

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

เมื่อใช้ continuous painting mode คุณอาจพบว่ารูปแบบ CSS border-radius และ box-shadow ช่วยเพิ่มเวลาในการวาดภาพ คุณเองก็ใช้ได้เหมือนกัน เพราะฟีเจอร์ดังกล่าวยอดเยี่ยมมาก และเราก็ยินดีอย่างยิ่งที่ได้พบกับคุณในวันนี้ แต่สิ่งสำคัญคือคุณต้องทราบว่าควรใช้งานเมื่อใดและที่ไหน หลีกเลี่ยงการใช้ในบริเวณที่มีการทำสีใหม่มากเกินไปและหลีกเลี่ยงการใช้มากเกินไปโดยทั่วไป

การสาธิตแบบสด

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