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

Addy Osmani
Addy Osmani

การลดพื้นที่หน่วยความจำของ 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 และ Mac OS แล้ว โดยจะเปิดให้บริการ Linux ในเร็วๆ นี้

แท็บที่ปักหมุดไว้จะถูกนำมาพิจารณาด้วยเช่นกันเมื่อตัดสินใจว่าจะทิ้งแท็บหรือไม่

แรงบันดาลใจ: สวัสดี ใจเย็นๆ

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

ภาพหน้าจอการระงับ

คุณสามารถยกเลิกการระงับแท็บได้เมื่อต้องโต้ตอบกับแท็บอีกครั้ง เช่นเดียวกับการยกเลิกแท็บ Great Sticker จะรักษาชื่อและไอคอน Fav ของแต่ละแท็บ โดยแสดงแท็บที่ถูกระงับในสถานะสีสลัว ทำให้กลับมาที่แท็บเหล่านั้นได้ทุกเมื่อ

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

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

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

การปรับปรุงในอนาคต: ตัวเรียงลำดับแท็บ

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

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

ภาพหน้าจอแสดงแนวคิด Serializer

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

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

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

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