การอัปเดตความสามารถของภาพเคลื่อนไหวแบบเร่งฮาร์ดแวร์

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

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

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

การเปิดใช้ภาพเคลื่อนไหวที่เร่งด้วยฮาร์ดแวร์

ภาพเคลื่อนไหวที่เร่งด้วยฮาร์ดแวร์จะประกอบเป็นเลเยอร์และช่วยให้นักพัฒนาแอปได้ภาพเคลื่อนไหวที่ราบรื่นระดับ 60 FPS (เฟรมต่อวินาที) เพื่อปรับปรุงประสิทธิภาพการแสดงผลภาพ ปัจจุบันมีวิธีระบุและเปิดใช้ภาพเคลื่อนไหวและการเปลี่ยนภาพที่เร่งด้วยฮาร์ดแวร์บนเว็บอยู่ 2-3 วิธี ดังนี้

  • ใช้ฟังก์ชัน transform ของ CSS หรือเปลี่ยนค่า opacity หรือ filter
  • เพิ่มพร็อพเพอร์ตี้ will-change ลงในองค์ประกอบ
  • สร้างภาพวาดแคนวาสแบบเคลื่อนไหวผ่าน OffscreenCanvas
  • สร้างภาพวาด 3 มิติของ WebGL
ทีมแสดงผลของ Chromium ติดตามการใช้งานพร็อพเพอร์ตี้ที่มีภาพเคลื่อนไหวมากที่สุดอย่างต่อเนื่องเพื่อพิจารณาว่าควรดำเนินการใดต่อไปเกี่ยวกับการเปิดใช้การเร่งด้วยฮาร์ดแวร์ แม้ว่าปัจจุบันพร็อพเพอร์ตี้ CSS ที่เร่งด้วยฮาร์ดแวร์โดยค่าเริ่มต้นจะมีเพียง opacity, filter และ transform แต่ background-color และ clip-path จะเข้าร่วมรายการนี้ในเร็วๆ นี้

รายการอื่นๆ ใดบ้างที่จะมีการเร่งด้วยฮาร์ดแวร์โดยค่าเริ่มต้นใน Chromium เรามีฟีเจอร์บางอย่างที่กำลังจะเปิดตัว ซึ่งรวมถึงภาพเคลื่อนไหว SVG ซึ่งเป็นฟีเจอร์ที่นักพัฒนาแอปขอมาอย่างกระตือรือร้น

ภาพเคลื่อนไหว SVG ที่เร่งด้วยฮาร์ดแวร์

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

ตัวอย่าง

มาดูความแตกต่างระหว่างภาพเคลื่อนไหว SVG ที่เปิดและไม่ได้เปิดการเร่งด้วยฮาร์ดแวร์กัน ตัวบ่งชี้การโหลดเป็นองค์ประกอบ UI ที่ใช้กันโดยทั่วไป เช่น ตัวบ่งชี้นี้ที่แสดงใน facebook.com ตัวบ่งชี้เหล่านี้บอกเป็นนัยว่ามีการดําเนินการบนเซิร์ฟเวอร์ขณะที่ผู้ใช้รอการตอบกลับ ในกรณีนี้ การแสดงผลคือโหลดผลการค้นหาเพิ่มเติมในแถบด้านข้าง

UI แถบด้านข้างของ Facebook แสดงเครื่องมือโหลดแบบวงกลมขณะโหลดเนื้อหาเพิ่มเติม

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

แผงประสิทธิภาพที่เปิดการกะพริบของสี
ซ้าย: Chromium 88 ขวา: Chromium 89 ที่มีการเร่งฮาร์ดแวร์สำหรับภาพเคลื่อนไหว SVG ดูการสาธิตโดย Benoit Girard ใน JSFiddle

คุณจะเห็นได้ว่าทางด้านซ้าย (Chromium 87) การวาดภาพใหม่จะเกิดขึ้นทุกครั้งที่ภาพสปินเนอร์เคลื่อนไหว (ซึ่งเคลื่อนไหวอย่างต่อเนื่อง) ทางด้านขวาไม่มีการวาดภาพใหม่ (Chromium 89 และ Firefox) เราทดสอบได้ในแผงการแสดงผลของเครื่องมือสำหรับนักพัฒนาเว็บ เมื่อเปิด "การกะพริบของสี"

แผงประสิทธิภาพที่แสดงการแสดงผล
ซ้าย: Chromium 88 ขวา: Chromium 89 ที่มีการเร่งฮาร์ดแวร์สำหรับภาพเคลื่อนไหว SVG ดูการสาธิตโดย Benoit Girard ใน JSFiddle

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

ภาพเคลื่อนไหวเปอร์เซ็นต์

ทีม Interactions ยังรองรับภาพเคลื่อนไหวการเปลี่ยนรูปแบบเปอร์เซ็นต์ใน Chromium 89 ด้วย ภาพเคลื่อนไหวตามเปอร์เซ็นต์จะอธิบายการโต้ตอบที่มีการเคลื่อนไหวตามเปอร์เซ็นต์ เช่น คุณอาจปรับขนาดสิ่งต่างๆ ขึ้น 20% หรือเลื่อนเมนูแถบด้านข้างที่ปรับเปลี่ยนตามอุปกรณ์จากนอกหน้าจอโดยใช้ translateX: -100%

ตัวอย่างการนำทางจาก waze.com ซึ่งใช้การเปลี่ยนรูปแบบเปอร์เซ็นต์เพื่อเปิดและซ่อนเมนูในหน้าจอขนาดเล็ก

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

มีอะไรใหม่

ภาพเคลื่อนไหวที่อัปเดตเหล่านี้จะทำให้การจัดสไตล์เว็บราบรื่นขึ้นมาก และดังที่กล่าวไว้ข้างต้น ทีมของเราคอยสังเกตดูว่าเว็บต้องการอะไรใหม่ๆ บ้าง ขณะนี้เรากําลังวางแผนที่จะแปลง background-color และ clip-path ให้ใช้การเร่งด้วยฮาร์ดแวร์โดยอัตโนมัติใน Chromium เวอร์ชันต่อๆ ไป

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

transition.style: เว็บไซต์สาธิตที่ไฮไลต์เอฟเฟกต์การเปลี่ยน CSS โดย Adam Argyle

รูปภาพหน้าปก: Siora Photography สำหรับ Unsplash