แท็บพื้นหลังอาจส่งผลลบอย่างมากต่อประสิทธิภาพของเบราว์เซอร์ โดยเฉพาะอายุการใช้งานแบตเตอรี่ เพื่อลดปัญหานี้ Chrome ได้ตั้ง ข้อจำกัดหลายอย่างเกี่ยวกับแท็บที่ทำงานอยู่เบื้องหลังมาหลายปีแล้ว เมื่อเร็วๆ นี้มีการพยายามมากมายที่จะปรับปรุงเพิ่มเติม และเอกสารนี้จะให้ภาพรวมของนโยบาย Chrome เอกสารนี้เน้นการอธิบายนโยบายปัจจุบันใน Chrome 57 อ่านกลยุทธ์ระยะยาวและแผนอื่นๆ ได้ในเอกสารนี้
การเพิ่มประสิทธิภาพแอปพลิเคชันสำหรับพื้นหลัง
นักพัฒนาเว็บควรตระหนักว่าผู้ใช้มักจะเปิดแท็บจำนวนมากอยู่ในเบื้องหลังและอาจส่งผลกระทบต่อการใช้พลังงานและอายุการใช้งานแบตเตอรี่เป็นอย่างมาก ควรเก็บงานในเบื้องหลังไว้ให้น้อยที่สุด นอกเสียจากมีความจำเป็นจริงๆ ที่จะต้องมอบประสบการณ์ของผู้ใช้ที่เฉพาะเจาะจง คุณควรใช้ 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 จะเรียกใช้ตัวจับเวลาเหล่านี้เป็นชุดวินาทีละครั้งเพื่อให้มั่นใจได้ว่าจำนวน Wakeup ของกระบวนการจะอยู่ในระดับต่ำสุด หน้าที่เล่นเสียงได้จะถือว่าผู้ใช้มองเห็นได้และได้รับการยกเว้นจากการควบคุมตัวจับเวลาในเบื้องหลัง การยกเว้นจะมีผลเป็นเวลาหลายวินาทีหลังจากที่เสียงหยุดเล่นเพื่อให้แอปพลิเคชันจัดคิวแทร็กเสียงถัดไป
โปรดทราบว่าเสียงจะถือว่าได้ยินเสียงเมื่อและเมื่อ Chrome แสดงไอคอนเสียงเท่านั้น สตรีมเสียงเงียบจะไม่ให้การยกเว้น
การควบคุมตัวจับเวลาในเบื้องหลังตามงบประมาณ
การจัดส่งใน Chrome 57 การควบคุมตัวจับเวลาโดยอิงตามงบประมาณเป็นส่วนเสริมของกลไกการปรับตัวจับเวลา ซึ่งเพิ่มขีดจำกัดการใช้งาน CPU ของตัวจับเวลาในเบื้องหลัง โดยมีวิธีการทำงานดังนี้
- แท็บเบื้องหลังแต่ละแท็บจะมีงบประมาณเวลา (เป็นวินาที) สำหรับเรียกใช้ตัวจับเวลาในเบื้องหลัง
- หน้าเว็บอาจมีข้อจำกัดด้านเวลาหลังจาก 10 วินาทีในเบื้องหลัง
- งานตัวจับเวลาจะทำงานเมื่องบประมาณด้านเวลาไม่ติดลบเท่านั้น
- หลังจากจับเวลาแล้ว เวลาที่แสดงจะถูกหักออกจากงบประมาณ
- ระบบจะสร้างงบประมาณใหม่อย่างต่อเนื่องเมื่อเวลาผ่านไป (ปัจจุบันกำหนดเป็นอัตรา 0.01 วินาทีต่อวินาที) โปรดทราบว่าอัตราการสร้างงบประมาณใหม่นี้อาจปรับเปลี่ยนได้เนื่องจาก Chrome รวบรวมข้อมูลเพิ่มเติมเกี่ยวกับพฤติกรรมการควบคุม
การยกเว้นอัตโนมัติจากการควบคุมนี้มีอยู่ด้วยกันหลายประการ ได้แก่
- แอปพลิเคชันที่เล่นเสียงจะถือว่าเป็นการทำงานเบื้องหน้าและจะไม่ถูกควบคุม
- แอปพลิเคชันที่มีการเชื่อมต่อแบบเรียลไทม์ (WebSockets และ WebRTC) เพื่อหลีกเลี่ยงการปิดการเชื่อมต่อเหล่านี้ด้วยการหมดเวลา กฎรันไทม์หนึ่งครั้งต่อวินาทียังคงมีผลในกรณีเหล่านี้
โปรดทราบว่ากลไกของเขาใช้เวลาทำงานจริง ไม่ใช่เวลา CPU เป็นระยะเวลาที่ CPU ใกล้เคียงโดยประมาณและบทลงโทษจากการบล็อกเทรดหลักเป็นระยะเวลานาน
สุดท้าย โปรดทราบว่าหากคุณใช้งานที่ใช้เวลานานในเบื้องหลัง ระบบอาจควบคุมแอปพลิเคชันของคุณเป็นระยะเวลาที่นานมาก (มีระยะเวลามากถึง 100 เท่าของงานของคุณ)
แบ่งงานออกเป็นช่วงๆ ที่ไม่เกิน 50 มิลลิวินาทีตามหลักเกณฑ์ด้านประสิทธิภาพ และใช้ Listener ของ visibilityChange
เพื่อหลีกเลี่ยงการทำงานที่ไม่จำเป็นในเบื้องหลัง
การเลือกไม่ใช้
Chrome แสดงค่าสถานะ --disable-background-timer-throttling
สำหรับกรณีการใช้งานต่างๆ เช่น การเรียกใช้ชุดทดสอบและการคำนวณอื่นๆ ที่ผู้ใช้อนุมัติ