การทิ้งแท็บใน Chrome - การทดลองประหยัดหน่วยความจำ

การลดพื้นที่หน่วยความจำของ Chrome เป็นหนึ่งในลำดับความสำคัญของทีมในปีนี้ เราเห็นการลดการใช้หน่วยความจำของ Gmail ลงถึง 45% แล้ว จากการปรับปรุงกระบวนการการเก็บขยะของ V8 แต่เราเพิ่งเริ่มต้นเท่านั้น การทดสอบครั้งถัดไปของเราเกี่ยวกับการใช้หน่วยความจำจะมุ่งเน้นไปที่ผู้ที่เปิดแท็บไว้หลายแท็บ (เช่น เราเอง) ซึ่งเรียกว่าการยกเลิก

แท็บที่เปิดอยู่บางแท็บอาจไม่ใช่แท็บที่ใช้อยู่ หากหน่วยความจำเหลือน้อย Chrome จะทิ้งแท็บเบื้องหลังที่ไม่น่าสนใจ

การทิ้งแท็บมีให้บริการแบบเวอร์ชันทดลองใน Chrome 46 ขึ้นไป

ข้อมูลเบื้องต้น

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

หน่วยความจำที่จําเป็นต่อแท็บ

เป้าหมายอย่างหนึ่งของเราคือการลดหน่วยความจำที่ใช้ในแท็บที่คุณไม่ได้ใช้งานจริง เมื่อดูแท็บที่ใช้หน่วยความจำระบบในโปรแกรมจัดการงานของ Chrome ฉันพบว่าฉัน "ใช้" เว็บไซต์ด้านล่างเพียง 1-2 เว็บไซต์เท่านั้น ขณะที่แท็บอื่นๆ ในเบื้องหลังไม่ได้ใช้งาน

ตัวจัดการงานที่ต้องใช้หน่วยความจำ

ด้วยเหตุนี้ การทิ้งแท็บจึงช่วยประหยัดหน่วยความจำได้

การทิ้งแท็บที่ไม่ได้ใช้

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

นอกจากนี้ เรายังมีฟีเจอร์ใหม่อีกรายการที่อนุญาตให้แคชทรัพยากรแท็บทั้งหมดในเครื่อง ซึ่งทำงานร่วมกับการทิ้งแท็บได้ดีเมื่อคุณออฟไลน์ เมื่อเปิดใช้งานแท็บอีกครั้ง เราจะให้คุณเลือกโหลดเวอร์ชันที่แคชไว้ซึ่งโหลดผ่านเครือข่ายก่อนหน้านี้ซ้ำ หากต้องการเปิดใช้การโหลดหน้าเว็บซ้ำจากแคช ให้ลองใช้การทดสอบอื่นในส่วน chrome://flags/#show-saved-copy

คุณลองใช้การทิ้งแท็บได้แล้ววันนี้โดยเปิดใช้ผ่าน chrome://flags/#enable-tab-discarding แล้วเปิด Chrome อีกครั้ง คุณสามารถควบคุมได้ว่าจะเปิดหรือปิดใช้ฟีเจอร์นี้ผ่านchrome://flagsหน้าเว็บ Chrome เดียวกัน

เปิดใช้ภาพหน้าจอการทิ้งแท็บ
ภาพหน้าจอปุ่มเปิดใหม่

หน้าใหม่ชื่อ chrome://discards ช่วยให้คุณดูรายการแท็บที่เปิดอยู่ได้ และเราจะพยายามแชร์ข้อมูลเชิงลึกเกี่ยวกับความน่าสนใจ (ที่เราคิดว่า) ของแท็บเหล่านั้นจากมากไปน้อย

ภาพหน้าจอของหน้าแท็บที่ทิ้ง

หากต้องการทดสอบฟีเจอร์นี้ ให้ท่องเว็บตามปกติจนกว่าระบบจะอยู่ในโหมดหน่วยความจำต่ำ หรือเรียกใช้การทิ้งแท็บจาก about:discards โดยคลิก "ทิ้งแท็บเลย" ซึ่งจะเป็นการยกเลิกแท็บสุดท้ายในรายการ นอกจากนี้ คุณยังทิ้งแท็บใดแท็บหนึ่งออกจากรายการได้โดยคลิกปุ่ม "ทิ้ง" ของแท็บนั้น แท็บที่ทิ้งจะแสดงโดยมีคำนำหน้า [ทิ้ง]

ภาพหน้าจอตัวอย่างแท็บที่ทิ้ง

การทิ้งแท็บจะทิ้งแท็บตามลำดับต่อไปนี้

  • หน้าภายใน เช่น หน้าแท็บใหม่ บุ๊กมาร์ก ฯลฯ
  • แท็บที่เลือกไว้นานแล้ว
  • แท็บที่เลือกล่าสุด
  • แอปที่ทำงานในหน้าต่าง
  • แท็บที่ปักหมุด
  • แท็บที่เลือก

เราได้เปิดใช้การทดสอบการทิ้งแท็บใน Chrome Canary สำหรับ Windows และ MacOS และจะเปิดใช้กับ Linux เร็วๆ นี้

ระบบจะพิจารณาแท็บที่ปักหมุดไว้ด้วยเมื่อพิจารณาว่าจะทิ้งแท็บหรือไม่

แรงบันดาลใจ: สวัสดี คุณ Great Suspender

หากการทิ้งแท็บฟังดูคุ้นเคย นั่นเป็นเพราะคุณอาจเคยเห็นส่วนขยาย Chrome ที่มีประโยชน์ซึ่งใช้แนวคิดนี้ในเวอร์ชันที่เรียบง่ายกว่าเล็กน้อย เช่น The Great Suspender The Great Suspender มีเป้าหมายเพื่อลดการใช้หน่วยความจำและ GPU ของ Chrome โดยจะระงับแท็บหลังจากไม่ได้ใช้งานเป็นระยะเวลาที่กำหนด

ภาพหน้าจอของโปรแกรมระงับ

คุณสามารถยกเลิกการระงับแท็บได้เมื่อต้องการโต้ตอบกับแท็บอีกครั้ง ซึ่งคล้ายกับการทิ้งแท็บ Great Suspender จะเก็บรักษาชื่อและ Favicon ของแท็บแต่ละรายการ โดยแสดงแท็บที่หยุดไว้ในสถานะสลัว ซึ่งช่วยให้คุณไปยังแท็บเหล่านั้นได้ง่ายๆ ได้ทุกเมื่อ

ภาพหน้าจอ Fav ของแท็บที่ถูกระงับ

ระบบได้ระงับแท็บในเบื้องหลังที่ฉันไม่ได้ใช้งานอยู่เพื่อประหยัดหน่วยความจำ อย่างไรก็ตาม แท็บที่ฉันยังใช้งานอยู่ (GitHub และ YouTube) ยังทำงานได้ตามปกติ

เราแชทกับนักพัฒนาส่วนขยาย Great Suspender ไปเมื่อตอนพัฒนาการทิ้งแท็บ และนักพัฒนาก็ดีใจที่เห็นว่าเราแก้ปัญหานี้ตั้งแต่ต้นด้วยวิธีที่มีประสิทธิภาพกว่าส่วนขยาย เช่น การสูญเสียสถานะของผู้ใช้ที่ไม่ได้ใช้งาน

การปรับปรุงในอนาคต: โปรแกรมจัดรูปแบบแท็บ

ตัวจัดรูปแบบแท็บเป็นงานในอนาคตที่เราคิดว่าอาจนำไปสู่การปรับปรุงแนวทางปัจจุบันในการทิ้งแท็บได้อย่างมาก โดยจะนำเนื้อหาของแท็บ Chrome และจัดรูปแบบสถานะ *ปัจจุบัน* ของแท็บเป็นบล็อกไบนารี บล็อกไบนารีนี้สามารถแปลงเป็นแท็บในภายหลัง

โปรแกรมจัดรูปแบบข้อมูลจะจัดรูปแบบข้อมูลเกือบทั้งหมดที่ Chrome, Blink และ V8 ต้องการเพื่อเก็บแท็บอย่างถูกต้อง (ซึ่งส่วนขยาย Chrome ที่จัดการปัญหานี้มาอย่างยาวนานยังทําได้ยาก) การจัดรูปแบบข้อมูลจะรวมสิ่งที่ต้องสงสัยตามปกติ เช่น DOM (ซึ่งมี WebGL และ Canvas จำนวนมากรวมอยู่ด้วย), CSS และสถานะของ V8 JavaScript VM

ภาพหน้าจอแนวคิดเกี่ยวกับ Serializer

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

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

ลองใช้การทิ้งแท็บแล้วบอกเราว่าคุณคิดอย่างไร

เราอยากทราบว่าฟีเจอร์นี้มีประโยชน์กับคุณหรือไม่ และควรปรับปรุงอย่างไร ลองใช้ดู (โดยเฉพาะหากคุณเป็นพวกเปิดแท็บไว้เยอะๆ) แล้วบอกให้เราทราบในความคิดเห็น :) นอกจากนี้ เรายินดีอย่างยิ่งหากคุณสามารถส่งคำขอแจ้งข้อบกพร่องเกี่ยวกับข้อบกพร่องที่คุณพบใน crbug.com