เผยแพร่เมื่อวันที่ 20 มกราคม 2025
ตั้งแต่ Chrome เวอร์ชัน 133 (กุมภาพันธ์ 2025) เป็นต้นไป แท็บที่ทำงานอยู่เบื้องหลังซึ่งใช้ CPU มากและมีสิทธิ์จะถูกหยุดไว้ชั่วคราวเมื่อโหมดประหยัดพลังงานทำงานอยู่ การดำเนินการนี้มีจุดประสงค์เพื่อลดการสิ้นเปลืองแบตเตอรี่สำหรับผู้ใช้ที่พึ่งพาโหมดประหยัดพลังงานและผู้ใช้ที่แบตเตอรี่ต้องใช้งานได้นานที่สุด ระบบจะระงับเฉพาะแท็บที่ทำงานอยู่เบื้องหลังซึ่งตรงตามเกณฑ์ที่เฉพาะเจาะจงและมีการใช้งาน CPU สูงเท่านั้น เพื่อลดการหยุดชะงัก
การหยุดทำงานคืออะไร
การหยุดชั่วคราวจะระงับการดําเนินการของหน้าเว็บ ซึ่งรวมถึงเนื้อหาต่อไปนี้
- แฮนเดิลเหตุการณ์ (เช่น อินพุต เครือข่าย และเซ็นเซอร์)
- ตัวจับเวลา
- ตัวแปรที่แก้ไข Promise
การหยุดชั่วคราวแตกต่างจากการทิ้ง ซึ่งระบบจะยกเลิกการโหลดแท็บออกจากหน่วยความจำ เมื่อโฟกัสไปที่แท็บที่หยุดทำงานแล้ว แท็บดังกล่าวจะเลิกหยุดทำงานโดยอัตโนมัติ และระบบจะดำเนินการกับงานที่รอดำเนินการโดยที่สถานะไม่สูญหาย
ระบบจะส่งเหตุการณ์หยุดชั่วคราวและกลับมาทํางานต่อเมื่อหน้าเว็บหยุดชั่วคราวหรือกลับมาทํางานต่อ (ดูเอกสารประกอบ Page Lifecycle API) เหตุการณ์เหล่านี้ช่วยให้หน้าเว็บปล่อยทรัพยากรที่ไม่ได้ใช้ แจ้งเซิร์ฟเวอร์ว่าหน้าเว็บหยุดชั่วคราว หรือบันทึกเมตริกได้
หน้าเว็บใดบ้างที่ตรึงได้
การหยุดทำงานชั่วคราวจะดำเนินการกับกลุ่มบริบทการท่องเว็บ
โดยปกติแล้ว กลุ่มบริบทการท่องเว็บจะประกอบด้วยแท็บเดียว อย่างไรก็ตาม แท็บหลายแท็บอาจอยู่ในกลุ่มเดียวกันได้เมื่อใช้ API เช่น window.open()
เมื่อเปิดใช้โหมดประหยัดพลังงาน ระบบจะหยุดกลุ่มบริบทการท่องเว็บไว้ชั่วคราวหากเป็นไปตามเงื่อนไขต่อไปนี้
- หน้าเว็บทั้งหมดภายในกลุ่มถูกซ่อนและปิดเสียงไว้นานกว่า 5 นาที
- กลุ่มย่อยของเฟรมต้นทางเดียวกันภายในกลุ่มจะ "ใช้ CPU มาก"
- กลุ่มไม่มีลักษณะดังนี้
- ให้บริการฟังก์ชันการประชุมทางเสียงหรือวิดีโอ (ตรวจพบโดยใช้ไมโครโฟน กล้อง การจับภาพหน้าจอ/หน้าต่าง/แท็บ หรือ RTCPeerConnection ที่มี RTCDataChannel "เปิด" หรือ MediaStreamTrack "สด")
- ควบคุมอุปกรณ์ภายนอก (ตรวจพบโดยใช้ Web USB, Web Bluetooth, Web HID หรือ Web Serial)
- ถือ Web Lock หรือการเชื่อมต่อ IndexedDB ที่บล็อกการดำเนินการนอกกลุ่ม
คำจำกัดความของ "ใช้ CPU มาก" อาจเปลี่ยนแปลงได้ แต่เจตนาของเราคือการยกเว้นไคลเอ็นต์อีเมลหรือแชทที่ติดตั้งใช้งานอย่างมีประสิทธิภาพ หรือแอปพลิเคชันปฏิทินที่สร้างการแจ้งเตือน
การหยุดแท็บทั้งหมดในกลุ่มบริบทการท่องเว็บเดียวกันไว้ชั่วคราวพร้อมกันจะช่วยลดการหยุดชะงักสำหรับแอปที่ใช้ป๊อปอัป เช่น สำหรับการเขียนข้อความหรือป้อนข้อมูลเข้าสู่ระบบ
ฉันจะเตรียมเว็บไซต์ได้อย่างไร
หากเว็บไซต์ไม่มีฟังก์ชันการทำงานในเบื้องหลัง (เช่น การแจ้งเตือน การอัปโหลดไฟล์ หรือการรีเฟรชเนื้อหา) ก็อาจไม่ได้รับผลกระทบจากการหยุดทำงาน
หากเว็บไซต์มีฟังก์ชันการทำงานในเบื้องหลัง ให้ลดการใช้งาน CPU ในเบื้องหลังเพื่อไม่ให้ระบบพิจารณาว่าใช้ CPU มากจนทำให้ระบบค้าง มาดูเคล็ดลับบางส่วนกัน
- หลีกเลี่ยงการใช้ตัวจับเวลาสำหรับการตรวจสอบการเปลี่ยนแปลงสถานะเป็นระยะ
- ใช้ IntersectionObserver เพื่อตรวจจับเมื่อองค์ประกอบเข้าสู่วิวพอร์ต
- ใช้ ResizeObserver เพื่อตรวจหาการเปลี่ยนแปลงขนาดองค์ประกอบ
- ใช้ MutationObserver หรือ callbacks ของวงจรชีวิตขององค์ประกอบที่กําหนดเองสําหรับการเปลี่ยนแปลง DOM
- ลองใช้ Web socket, เหตุการณ์ที่ส่งจากเซิร์ฟเวอร์, ข้อความ Push หรือสตรีมการดึงข้อมูลแทนเซิร์ฟเวอร์การโหวต
- ใช้เหตุการณ์ เช่น timeupdate และ ended สำหรับการเปลี่ยนแปลงเสียงหรือวิดีโอ
นอกจากนี้ เราขอแนะนําให้ย้ายข้อมูลฟังก์ชันการทํางานเบื้องหลังไปยัง Service Worker เพื่อไม่ให้ได้รับผลกระทบจากการหยุดทำงาน นอกจากจะไม่ได้รับผลกระทบจากการหยุดทำงานแล้ว บริการเวิร์กเกอร์ยังใช้ทรัพยากรของเบราว์เซอร์น้อยกว่าด้วย ลองใช้สิ่งต่อไปนี้
- Push API สําหรับการแจ้งเตือน
- Background Synchronization API หรือ Web Periodic Background Synchronization API สำหรับการดึงข้อมูลอัปเดต
เว็บไซต์สามารถเลือกไม่ใช้การหยุดทำงานชั่วคราวได้โดยเข้าร่วมช่วงทดลองใช้จากต้นทางของ BackgroundPageFreezeOptOut การทดลองใช้นี้จะสิ้นสุดลงเมื่อมีการเผยแพร่ API ใหม่สำหรับการประกาศงานสำคัญในเบื้องหลัง (เช่น Progress Notification API)
คุณตรวจสอบสิทธิ์ในการหยุดแท็บชั่วคราวได้ที่ chrome://discards
โปรดทราบว่าแม้ว่าแท็บจะมีสิทธิ์หยุดชั่วคราว แต่ Chrome 133 จะหยุดแท็บชั่วคราวก็ต่อเมื่อแท็บนั้นใช้ CPU มากและโหมดประหยัดพลังงานทำงานอยู่
ขั้นตอนถัดไปคือ
การตรึงแท็บเบื้องหลังจะช่วยประหยัดพลังงาน ซึ่งสำคัญอย่างยิ่งสำหรับผู้ใช้ที่เปิดใช้โหมดประหยัดพลังงาน
นอกจากนี้ ยังช่วยปรับปรุงประสิทธิภาพของแท็บที่ทำงานอยู่เบื้องหน้าและช่วยหลีกเลี่ยงการสิ้นสุดการทำงานของแท็บที่ทำงานอยู่เบื้องหลัง โดยเฉพาะในอุปกรณ์ที่มีทรัพยากรจํากัด ด้วยการลดการใช้งาน CPU และการเข้าถึงหน่วยความจํา ดังนั้น Chrome จะขยายการหยุดแท็บชั่วคราวไปยังสถานการณ์อื่นๆ เพิ่มเติม (เราจะประกาศการเปลี่ยนแปลงใน blink-dev@chromium.org) ในการดําเนินการนี้โดยไม่รบกวน Use Case เบื้องหลังให้น้อยที่สุด API ใหม่ เช่น Progress Notification API จะอนุญาตให้หน้าเว็บประกาศงานสําคัญที่ทําในเบื้องหลังและป้องกันการหยุดทำงาน