ใช้คุณสมบัติเฉพาะคอมโพเนนต์และจัดการจำนวนเลเยอร์

การประกอบหน้าเว็บคือบริเวณที่ส่วนที่วาดของหน้าเว็บมาประกอบกันเพื่อแสดงบนหน้าจอ

การประกอบคือการนำส่วนที่วาดของหน้ามาประกอบกันเพื่อ แสดงบนหน้าจอ

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

สรุป

  • อย่าหยุดเปลี่ยนรูปแบบและความทึบแสงของภาพเคลื่อนไหว
  • โปรโมตองค์ประกอบที่เคลื่อนไหวด้วย will-change หรือ translateZ
  • หลีกเลี่ยงการใช้กฎการโปรโมตมากเกินไป เลเยอร์ต่างๆ ต้องใช้หน่วยความจำและการจัดการ

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

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

ไปป์ไลน์พิกเซลที่ไม่มีเลย์เอาต์หรือการระบายสี

เพื่อให้บรรลุเป้าหมายนี้ คุณจะต้องเปลี่ยนแปลงคุณสมบัติที่เครื่องมือประกอบเพียงอย่างเดียวสามารถจัดการได้ ปัจจุบันมีพร็อพเพอร์ตี้ที่เป็นจริงเพียง 2 รายการ คือ transform และ opacity

คุณสมบัติที่คุณทำให้เคลื่อนไหวได้โดยไม่ต้องทริกเกอร์เลย์เอาต์หรือระบายสี

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

โปรโมตองค์ประกอบที่คุณวางแผนจะทำเป็นภาพเคลื่อนไหว

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

.moving-element {
  will-change: transform;
}

หรือสำหรับเบราว์เซอร์รุ่นเก่าหรือเบราว์เซอร์ที่ไม่รองรับ จะมีการเปลี่ยนแปลง:

.moving-element {
  transform: translateZ(0);
}

จัดการเลเยอร์และหลีกเลี่ยงการระเบิดของเลเยอร์

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

* {
  will-change: transform;
  transform: translateZ(0);
}

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

ใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome เพื่อทำความเข้าใจเลเยอร์ในแอป

ปุ่มเปิด/ปิดของเครื่องมือสร้างโปรไฟล์การแสดงผลใน Chrome DevTools

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

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

เฟรมที่นักพัฒนาซอฟต์แวร์สนใจในการทำโปรไฟล์

เมื่อคลิกตัวเลือกนี้ คุณจะเห็นตัวเลือกใหม่ในรายละเอียด นั่นก็คือแท็บเลเยอร์

ปุ่มแท็บเลเยอร์ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

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

มุมมองเลเยอร์ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

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