Удаление вкладок в Chrome: эксперимент по экономии памяти

Адди Османи
Addy Osmani

Сокращение потребления памяти Chrome — один из главных приоритетов команды в этом году. Мы уже наблюдаем сокращение использования памяти GMail на 45 % благодаря улучшениям в процессе сборки мусора в V8, но на самом деле мы только начинаем. Один из наших следующих экспериментов по использованию памяти нацелен на любителей табуляции (таких как я). Это называется «Отбрасывание вкладок» .

Не все открытые вкладки являются используемыми. Если мало памяти, Chrome может отбросить неинтересные фоновые вкладки.

Удаление вкладок доступно в качестве эксперимента в Chrome 46 и более поздних версиях.

Фон

Для каждой открытой вкладки наш процесс рендеринга обычно занимает около 50 МБ на вкладку, хотя большинство людей используют только одну вкладку одновременно. Если у вас открыто 10 вкладок, то на поддержание состояния фоновой вкладки тратится не менее 450 МБ памяти. Со временем это может стать немного громоздким.

Требуемая память для каждой вкладки

Одна из наших целей — уменьшить объем памяти, занимаемой вкладками, которые вы на самом деле не используете. Если я посмотрю, какие вкладки занимают мою системную память в диспетчере задач Chrome, я на самом деле просто «использую» один или два сайта ниже, в то время как другие вкладки в фоновом режиме не используются.

Требуемая память диспетчер задач

Именно здесь отбрасывание вкладок может помочь уменьшить использование памяти.

Удаление неиспользуемых вкладок

Отбрасывание вкладок позволяет Chrome автоматически удалять вкладки, которые не представляют для вас большого интереса, когда обнаруживается, что системной памяти не хватает. Что мы подразумеваем под отказом? Ну а выброшенная вкладка никуда не денется. Мы уничтожили его, но он все еще виден на вкладке Chrome. Если вы вернетесь к удаленной вкладке, она перезагрузится при нажатии. Содержимое формы, положение прокрутки и т. д. сохраняются и восстанавливаются так же, как при навигации по вкладкам вперед/назад.

У нас также есть еще одна новая функция, которая позволяет кэшировать все ресурсы вкладок локально, что прекрасно работает с удалением вкладок, когда вы находитесь в автономном режиме. Когда вкладка снова активируется, мы предлагаем вам перезагрузить кэшированную версию, которая ранее была загружена по сети. Чтобы включить перезагрузку страницы из кеша, вы можете попробовать еще один эксперимент в chrome://flags/#show-saved-copy .

Вы можете попробовать удаление вкладок сегодня, включив его через chrome://flags/#enable-tab-discarding и перезапустив Chrome. Вы можете контролировать, включена или отключена эта функция, на той же странице Chrome chrome://flags .

Включить скрытие экрана с вкладкой.
Скриншот кнопки перезапуска.

Новая страница под названием chrome://discards позволяет вам перечислить, какие вкладки открыты в данный момент, и мы пытаемся поделиться некоторым представлением о том, насколько (по нашему мнению) они вам интересны, от большинства до наименее.

Скриншот страницы удаленных вкладок.

Чтобы протестировать эту функцию, вы можете либо вести обычный просмотр, пока ваша система не перейдет в режим нехватки памяти, либо, в качестве альтернативы, вызвать удаление вкладки из about:discards, нажав «Отменить вкладку сейчас». Это приведет к удалению последней вкладки в списке. Вы также можете удалить определенную вкладку из списка, нажав соответствующую кнопку «Удалить». Сброшенная вкладка будет отображаться с префиксом [Discarded].

Скриншот примера удаленной вкладки.

При удалении вкладок вкладки удаляются в следующем порядке:

  • Внутренние страницы, такие как страница новой вкладки, закладки и т. д.
  • Вкладки выбраны давно
  • Недавно выбранные вкладки
  • Приложения, работающие в окне
  • Закрепленные вкладки
  • Выбранная вкладка

Мы включили эксперимент по удалению вкладок в Chrome Canary для Windows и Mac OS, скоро появится реализация для Linux.

Закрепленные вкладки также учитываются при принятии решения об удалении вкладки.

Вдохновение: привет, отличные подтяжки

Если отказ от вкладок звучит знакомо, это потому, что вы, вероятно, сталкивались с полезными расширениями Chrome, которые предоставляют вам немного более простую версию этой идеи, например The Great Suspender . Цель Great Suspender — сократить использование памяти Chrome и графического процессора за счет приостановки вкладок после заданного периода бездействия.

Скриншот подтяжки.

Подобно удалению вкладок, вкладки можно возобновить, когда вам нужно снова с ними взаимодействовать. Great Suspender сохраняет заголовок и значок каждой вкладки, показывая приостановленные вкладки затемненными, что позволяет легко вернуться к ним в любое время.

Скриншот значка приостановленных вкладок.

Вкладки в фоновом режиме, которые я не использую активно, были приостановлены для экономии памяти. Однако вкладки, которые я до сих пор активно использую (GitHub и YouTube), продолжают работать в обычном режиме.

На самом деле мы отлично побеседовали с автором расширения Great Suspender во время разработки отбрасывания табуляции, и они рады видеть, что мы решаем эту проблему более эффективными способами, чем это может сделать расширение, например, теряя состояние бездействие вашего пользователя.

Будущие улучшения: сериализатор вкладок.

Сериализатор вкладок — это будущая часть работы, которая, по нашему мнению, может привести к значительным улучшениям нашего текущего подхода к отбрасыванию вкладок. Он берет содержимое вкладки Chrome и сериализует ее *текущее* состояние в двоичный объект. Этот двоичный объект позже можно десериализовать во вкладку.

Сериализатор будет сериализовать почти все, что нужно Chrome, Blink и V8 для правильного сохранения вкладки (чего исторически не могли легко достичь расширениями Chrome, решающими эту проблему). Сериализация будет включать в себя обычные подозреваемые: DOM (с большим количеством WebGL и Canvas), CSS и состояние виртуальной машины JavaScript V8.

Скриншот концепции сериализатора

Если вы используете Android или ChromeOS, вы, возможно, знаете, что (аналогично эксперименту с удалением вкладок, описанному в этом посте) мы агрессивно уничтожаем фоновые вкладки, чтобы обеспечить низкое использование памяти. Проблема с тем, как мы решаем эту проблему, заключалась в том, что ваша вкладка потеряет *все* свое состояние.

Когда вы снова проявите интерес к вкладке, нам придется перезагрузить ее, и все ваше взаимодействие с ней будет потеряно. Сериализатор вкладок решает эту проблему таким образом, что возвращает вас почти к тому состоянию, в котором вы были, без необходимости возвращаться в сеть. Мы с нетерпением ждем возможности поделиться дополнительной информацией об этой работе позже.

Попробуйте отказаться от вкладок и дайте нам знать, что вы думаете

Мы хотели бы знать, полезна ли вам эта функция и как ее можно улучшить. Попробуйте, поиграйтесь с ним (особенно если вы накопили вкладки!) и дайте нам знать, что вы думаете в комментариях. :) Мы также будем признательны, если вы будете отправлять заявки на любые ошибки, с которыми вы сталкиваетесь на crbug.com .