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

แอดดี้ ออสมานี
แอดดี ออสมานี

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

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

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

ที่มา

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

ต้องใช้หน่วยความจำต่อแท็บ

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

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

การลบแท็บจึงช่วยลดการใช้หน่วยความจำของเราได้

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

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

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

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

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

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

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

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

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

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

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

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

แท็บที่ถูกตรึงจะได้รับการพิจารณาด้วยเมื่อพิจารณาว่าจะยกเลิกแท็บหรือไม่

แรงบันดาลใจ: สวัสดี สายสะพายที่ยอดเยี่ยม

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

ภาพหน้าจอแบบแขวน

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

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

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

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

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

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

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

ภาพหน้าจอแนวคิดตัวทำให้เป็นซีเรียลไลเซอร์

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

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

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

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