ค้างเมื่อใช้โหมดประหยัดพลังงาน

François Doray
François Doray

เผยแพร่เมื่อวันที่ 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 มากจนทำให้ระบบค้าง มาดูเคล็ดลับบางส่วนกัน

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

เว็บไซต์สามารถเลือกไม่ใช้การหยุดทำงานชั่วคราวได้โดยเข้าร่วมช่วงทดลองใช้จากต้นทางของ BackgroundPageFreezeOptOut การทดลองใช้นี้จะสิ้นสุดลงเมื่อมีการเผยแพร่ API ใหม่สำหรับการประกาศงานสำคัญในเบื้องหลัง (เช่น Progress Notification API)

คุณตรวจสอบสิทธิ์ในการหยุดแท็บชั่วคราวได้ที่ chrome://discards โปรดทราบว่าแม้ว่าแท็บจะมีสิทธิ์หยุดชั่วคราว แต่ Chrome 133 จะหยุดแท็บชั่วคราวก็ต่อเมื่อแท็บนั้นใช้ CPU มากและโหมดประหยัดพลังงานทำงานอยู่

ขั้นตอนถัดไปคือ

การตรึงแท็บเบื้องหลังจะช่วยประหยัดพลังงาน ซึ่งสำคัญอย่างยิ่งสำหรับผู้ใช้ที่เปิดใช้โหมดประหยัดพลังงาน

นอกจากนี้ ยังช่วยปรับปรุงประสิทธิภาพของแท็บที่ทำงานอยู่เบื้องหน้าและช่วยหลีกเลี่ยงการสิ้นสุดการทำงานของแท็บที่ทำงานอยู่เบื้องหลัง โดยเฉพาะในอุปกรณ์ที่มีทรัพยากรจํากัด ด้วยการลดการใช้งาน CPU และการเข้าถึงหน่วยความจํา ดังนั้น Chrome จะขยายการหยุดแท็บชั่วคราวไปยังสถานการณ์อื่นๆ เพิ่มเติม (เราจะประกาศการเปลี่ยนแปลงใน blink-dev@chromium.org) ในการดําเนินการนี้โดยไม่รบกวน Use Case เบื้องหลังให้น้อยที่สุด API ใหม่ เช่น Progress Notification API จะอนุญาตให้หน้าเว็บประกาศงานสําคัญที่ทําในเบื้องหลังและป้องกันการหยุดทำงาน