Loại bỏ thẻ trong Chrome – Thử nghiệm tiết kiệm bộ nhớ

Addy Osmani
Addy Osmani

Việc giảm mức sử dụng bộ nhớ của Chrome là một trong những ưu tiên hàng đầu của nhóm trong năm nay. Chúng tôi đã thấy mức sử dụng bộ nhớ của Gmail giảm tới 45% nhờ những cải tiến trong quy trình thu gom rác của V8, nhưng chúng tôi thực sự chỉ mới bắt đầu. Một trong những thử nghiệm tiếp theo của chúng tôi về việc sử dụng bộ nhớ là nhắm đến những người tích trữ thẻ (như tôi). Thao tác này được gọi là Loại bỏ thẻ.

Không phải thẻ nào đang mở đều là thẻ được sử dụng. Nếu còn ít bộ nhớ, Chrome có thể loại bỏ các thẻ nền không thú vị.

Bạn có thể huỷ thẻ dưới dạng thử nghiệm trong Chrome 46 trở lên.

Thông tin khái quát

Đối với mỗi thẻ bạn mở, quy trình kết xuất đồ hoạ của chúng tôi thường mất khoảng 50 MB trên mỗi thẻ, mặc dù hầu hết mọi người chỉ sử dụng một thẻ tại một thời điểm. Nếu bạn có 10 thẻ đang mở, thì có ít nhất 450 MB bộ nhớ đang được dùng để duy trì trạng thái thẻ trong nền. Bạn có thể thấy khó sử dụng tính năng này theo thời gian.

Bộ nhớ cần thiết cho mỗi thẻ

Một trong những mục tiêu của chúng tôi là giảm bộ nhớ được sử dụng trên các thẻ mà bạn không thực sự sử dụng. Nếu tôi xem những thẻ nào đang sử dụng bộ nhớ hệ thống trong Trình quản lý tác vụ Chrome, tôi thực sự chỉ "sử dụng" một hoặc hai trang web bên dưới trong khi các thẻ khác trong nền không được sử dụng.

Trình quản lý tác vụ cần có bộ nhớ

Đó là lúc việc loại bỏ thẻ có thể giúp giảm mức sử dụng bộ nhớ của chúng ta.

Đang loại bỏ các thẻ không sử dụng

Thao tác loại bỏ thẻ cho phép Chrome tự động loại bỏ các thẻ mà bạn không quan tâm khi phát hiện thấy bộ nhớ hệ thống sắp hết. Huỷ nghĩa là gì? Ôi, một thẻ bị loại bỏ sẽ không mất đi đâu. Chúng tôi sẽ tắt lớp này nhưng nó vẫn hiển thị trên dải thẻ của Chrome. Nếu bạn quay lại một thẻ đã bị loại bỏ, thì thẻ này sẽ tải lại khi được nhấp vào. Nội dung biểu mẫu, vị trí cuộn, v.v. được lưu và khôi phục giống như trong quá trình di chuyển thẻ tiến/lùi.

Chúng tôi cũng có một tính năng mới khác cho phép lưu tất cả tài nguyên thẻ vào bộ nhớ đệm cục bộ. Tính năng này hoạt động tốt với tính năng loại bỏ thẻ khi bạn không có kết nối mạng. Khi thẻ được kích hoạt lại, chúng tôi sẽ cung cấp cho bạn lựa chọn tải lại phiên bản đã lưu vào bộ nhớ đệm đã được tải trước đó qua mạng. Để cho phép tải lại trang từ bộ nhớ đệm, bạn có thể thử một thử nghiệm khác trong chrome://flags/#show-saved-copy.

Bạn có thể dùng thử tính năng loại bỏ thẻ ngay hôm nay bằng cách bật tính năng này thông qua chrome://flags/#enable-tab-discarding và chạy lại Chrome. Bạn có thể kiểm soát việc bật hay tắt tính năng này thông qua cùng một trang chrome://flags của Chrome.

Bật ảnh chụp màn hình loại bỏ thẻ.
Ảnh chụp màn hình nút Chạy lại.

Trang mới có tên là chrome://discards cho phép bạn liệt kê những thẻ hiện đang mở và chúng tôi cố gắng chia sẻ một số thông tin chi tiết về mức độ thú vị (mà chúng tôi cho rằng) các thẻ đó đối với bạn, từ nhiều nhất đến ít nhất.

Ảnh chụp màn hình trang Thẻ bị huỷ.

Để dùng thử tính năng này, bạn có thể thực hiện hành vi duyệt web bình thường cho đến khi hệ thống của bạn ở chế độ bộ nhớ thấp hoặc kích hoạt một loại bỏ thẻ khỏi about:discards bằng cách nhấp vào 'Cancel tab now' (Huỷ thẻ ngay). Thao tác này sẽ loại bỏ thẻ cuối cùng trong danh sách. Bạn cũng có thể loại bỏ một thẻ cụ thể khỏi danh sách bằng cách nhấp vào nút "Huỷ" tương ứng. Thẻ bị loại bỏ sẽ hiển thị cùng với tiền tố [Canceled].

Ảnh chụp màn hình ví dụ về thẻ đã bị huỷ.

Thao tác huỷ thẻ sẽ loại bỏ các thẻ theo thứ tự sau:

  • Các trang nội bộ như trang thẻ mới, dấu trang, v.v.
  • Các thẻ được chọn từ lâu
  • Các thẻ được chọn gần đây
  • Ứng dụng chạy trong một cửa sổ
  • Thẻ được ghim
  • Thẻ đã chọn

Chúng tôi đã bật thử nghiệm loại bỏ thẻ trong Chrome Canary cho Windows và Mac OS và sẽ sớm triển khai trên Linux.

Thẻ được ghim cũng được tính đến khi xem xét có nên huỷ thẻ hay không

Cảm hứng: chào bạn, người mặc quần áo tuyệt vời

Nếu việc loại bỏ thẻ nghe có vẻ quen thuộc, thì đó là vì bạn có thể đã gặp các tiện ích hữu ích của Chrome cung cấp cho bạn phiên bản đơn giản hơn một chút của ý tưởng này, chẳng hạn như The Great Suspender (Trình tạm ngưng tuyệt vời). Mục đích của Great Suspender là giảm mức sử dụng bộ nhớ và GPU của Chrome bằng cách tạm ngưng các thẻ sau một khoảng thời gian tuỳ chỉnh không hoạt động.

Ảnh chụp màn hình về trình tạm ngưng.

Tương tự như việc loại bỏ thẻ, bạn có thể huỷ tạm ngưng các thẻ khi cần tương tác lại với chúng. Suspender tuyệt vời duy trì tiêu đề và biểu tượng trang web của từng thẻ, hiển thị các thẻ bị tạm ngưng ở trạng thái làm mờ, giúp bạn dễ dàng quay lại các thẻ đó bất cứ lúc nào.

Ảnh chụp màn hình biểu tượng trang web có thẻ bị tạm ngưng.

Các thẻ chạy ở chế độ nền mà tôi không chủ động sử dụng đã bị tạm ngưng, giúp tiết kiệm bộ nhớ. Tuy nhiên, các thẻ tôi vẫn đang tích cực sử dụng (GitHub và YouTube) vẫn chạy như bình thường.

Chúng tôi đã có một cuộc trò chuyện tuyệt vời với tác giả của tiện ích Great Suspender trong khi phát triển tính năng loại bỏ thẻ. Họ rất vui khi thấy chúng tôi có thể giải quyết vấn đề này theo những cách hiệu quả hơn một tiện ích, chẳng hạn như làm mất trạng thái không hoạt động của người dùng.

Cải tiến trong tương lai: trình chuyển đổi tuần tự thẻ

Trình chuyển đổi tuần tự thẻ là một tính năng trong tương lai mà chúng tôi cho rằng có thể giúp cải thiện đáng kể phương pháp loại bỏ thẻ hiện tại. Thao tác này lấy nội dung trên thẻ Chrome và chuyển đổi tuần tự trạng thái *hiện tại* của thẻ thành một blob nhị phân. Sau đó, blob nhị phân này có thể được giải tuần tự thành một thẻ.

Trình chuyển đổi tuần tự sẽ chuyển đổi tuần tự hầu hết mọi thứ mà Chrome, Blink và V8 cần để lưu giữ đúng cách một thẻ (một điều mà các tiện ích của Chrome trước đây không thể dễ dàng đạt được). Quá trình chuyển đổi tuần tự sẽ bao gồm các nghi ngờ thông thường: DOM (bao gồm nhiều WebGL và Canvas), CSS và trạng thái của máy ảo JavaScript V8.

Ảnh chụp màn hình khái niệm của trình chuyển đổi tuần tự

Nếu sử dụng Android hoặc ChromeOS, bạn có thể biết rằng (tương tự như thử nghiệm loại bỏ thẻ được đề cập trong bài đăng này), chúng tôi quyết định loại bỏ các thẻ trong nền để đảm bảo mức sử dụng bộ nhớ thấp. Vấn đề trong cách chúng tôi xử lý vấn đề này là thẻ của bạn sẽ mất *tất cả* trạng thái.

Khi bạn thể hiện sự quan tâm đến thẻ một lần nữa, chúng ta sẽ phải tải lại thẻ đó và mọi hoạt động tương tác của bạn với thẻ sẽ bị mất. Trình chuyển đổi tuần tự thẻ chỉ tiếp cận vấn đề này theo cách có thể giúp bạn quay lại gần như chính xác nội dung bạn đang có mà không cần quay lại mạng. Chúng tôi hy vọng có thể chia sẻ thêm thông tin về công việc này sau.

Thử loại bỏ thẻ và cho chúng tôi biết suy nghĩ của bạn

Chúng tôi muốn biết tính năng này có hữu ích với bạn hay không và có thể cải thiện như thế nào. Hãy thử, thử với tính năng này (đặc biệt nếu bạn là người tích luỹ thẻ!) và cho chúng tôi biết suy nghĩ của bạn trong phần nhận xét. :) Chúng tôi cũng sẽ rất mong bạn gửi phiếu yêu cầu hỗ trợ về mọi lỗi gặp phải trên crbug.com.