แท็บในพื้นหลังอาจมีผลเสียอย่างมากต่อประสิทธิภาพของเบราว์เซอร์ โดยเฉพาะในเรื่องอายุการใช้งานแบตเตอรี่ Chrome จึงจำกัดแท็บที่ทำงานอยู่เบื้องหลังหลายอย่างในช่วงหลายปีที่ผ่านมาเพื่อลดปัญหานี้ เมื่อเร็วๆ นี้ เราได้พยายามปรับปรุงเพิ่มเติมหลายอย่าง และเอกสารนี้จะกล่าวถึงภาพรวมของนโยบาย Chrome เอกสารนี้มุ่งเน้นที่การอธิบายนโยบายปัจจุบันใน Chrome 57 ดูกลยุทธ์ระยะยาวและแผนอื่นๆ ได้ในเอกสารนี้
กำลังเพิ่มประสิทธิภาพแอปพลิเคชันสำหรับพื้นหลัง
นักพัฒนาเว็บควรตระหนักว่าผู้ใช้มักเปิดแท็บจำนวนมากในพื้นหลัง และยังอาจมีผลกระทบร้ายแรงต่อการใช้พลังงานและอายุการใช้งานแบตเตอรี่ การทำงานในเบื้องหลังควรมีให้น้อยที่สุด เว้นแต่จำเป็นอย่างยิ่งเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานบางอย่าง คุณควรใช้ Page Visibility API เพื่อตรวจหาเมื่อหน้าเว็บทำงานอยู่เบื้องหลังและระงับการทำงานที่ไม่จำเป็นทั้งหมด เช่น การอัปเดตภาพ
สําหรับบางเว็บไซต์ การเพิ่มประสิทธิภาพแบบง่ายนี้ช่วยลดการใช้ CPU ได้มากถึง 75% ดังนี้
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
นโยบาย
requestAnimationFrame()
ตามเอกสารประกอบ
Chrome ไม่เรียกใช้ requestAnimationFrame()
เมื่อหน้าเว็บอยู่ในเบื้องหลัง
ซึ่งใช้มาตั้งแต่ปี 2011
การปรับแนวตัวจับเวลาในเบื้องหลัง
ตั้งแต่ Chrome 11 ตัวจับเวลาแต่ละตัวจะทำงานไม่เกิน 1 ครั้งต่อวินาที Chrome จะเรียกใช้ตัวจับเวลาเหล่านี้เป็นชุดๆ วินาทีละครั้ง เพื่อให้แน่ใจว่ามีการเก็บการปลุกระบบของกระบวนการให้น้อยที่สุด หน้าเว็บที่เล่นเสียงแบบเปิดเสียงจะถือว่าผู้ใช้มองเห็นได้และได้รับการยกเว้นจากตัวจับเวลาการเล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่น การควบคุม การยกเว้นจะคงอยู่หลายวินาทีหลังจากที่เสียงหยุดเล่นเพื่อให้ เพื่อจัดคิวแทร็กเสียงถัดไป
โปรดทราบว่าระบบจะถือว่ามีเสียงก็ต่อเมื่อ Chrome แสดงไอคอน "เสียง" เท่านั้น ทั้งนี้ การสตรีมเสียงแบบปิดเสียงจะไม่ให้การยกเว้น
การควบคุมตัวจับเวลาในเบื้องหลังตามงบประมาณ
มีให้บริการใน Chrome 57 การจำกัดตัวจับเวลาตามงบประมาณเป็นกลไกเพิ่มเติมในการปรับเวลาตัวจับเวลา ซึ่งจะจำกัดการใช้งาน CPU ของตัวจับเวลาเบื้องหลังเพิ่มเติม โดยมีวิธีการทำงานดังนี้
- แท็บในเบื้องหลังแต่ละแท็บมีงบประมาณเวลา (เป็นวินาที) เพื่อเรียกใช้ตัวจับเวลาในเบื้องหลัง
- หน้าเว็บมีข้อจำกัดด้านเวลาสำหรับงบประมาณหลังจากผ่านไปแล้ว 10 วินาทีในพื้นหลัง
- ระบบจะอนุญาตให้งานตัวจับเวลาทํางานก็ต่อเมื่องบประมาณเวลาเป็นค่าบวกเท่านั้น
- หลังจากตัวจับเวลาทํางานแล้ว ระบบจะหักรันไทม์ออกจากงบประมาณ
- งบประมาณจะสร้างขึ้นใหม่อย่างต่อเนื่องเมื่อเวลาผ่านไป (ปัจจุบันตั้งค่าไว้ที่อัตรา 0.01 วินาทีต่อวินาที) โปรดทราบว่าอัตราการสร้างงบประมาณใหม่นี้สามารถปรับแต่งได้เมื่อ Chrome รวบรวมข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการจำกัด
การจำกัดนี้มีข้อยกเว้นอัตโนมัติหลายประการ ดังนี้
- แอปพลิเคชันที่เล่นเสียงจะถือว่าอยู่เบื้องหน้าและจะไม่ถูกจำกัด
- แอปพลิเคชันที่มีการเชื่อมต่อแบบเรียลไทม์ (WebSockets และ WebRTC) เพื่อหลีกเลี่ยงการปิดการเชื่อมต่อเหล่านี้เนื่องจากหมดเวลา กฎการจับเวลา 1 วินาทีจะยังคง ใช้ในกรณีเหล่านี้
โปรดทราบว่ากลไกนี้ใช้เวลาจริง ไม่ใช่เวลา CPU นี่เป็นการประมาณเวลา CPU ที่เหมาะสมและบทลงโทษในการบล็อกเทรดหลักสำหรับ ในระยะยาว
ข้อสุดท้าย อย่าลืมว่าหากคุณใช้งานที่ใช้เวลานานในเบื้องหลัง แอปพลิเคชันของคุณ
อาจถูกควบคุมเป็นระยะเวลานานมาก (สูงสุด 100 เท่าของระยะเวลางานของคุณ)
แบ่งงานออกเป็นกลุ่มๆ ละไม่เกิน 50 มิลลิวินาทีตามหลักเกณฑ์ด้านประสิทธิภาพ และใช้สไลเทนเนอร์ visibilityChange
เพื่อหลีกเลี่ยงการทำงานที่ไม่จำเป็นในเบื้องหลัง
การเลือกไม่ใช้
Chrome มี Flag --disable-background-timer-throttling
สำหรับ Use Case เช่น การเรียกใช้ชุดทดสอบและการประมวลผลที่หนักหน่วงอื่นๆ ที่ผู้ใช้อนุญาต