Chrome вносит изменения, позволяющие использовать обратный/прямой кэш (bfcache) для страниц, использующих Cache-Control: no-store
когда это безопасно. Узнайте, что это значит для разработчиков.
Фон
Установка Cache-Control: no-store
в качестве HTTP-заголовка является сигналом о том, что страница не должна храниться в HTTP-кеше. Это следует использовать для страниц, содержащих конфиденциальные данные — например, для страниц, когда пользователь вошел в систему, — но директива no-store
часто используется на страницах без конфиденциальных данных.
С помощью bfcache вместо уничтожения страницы, когда пользователь уходит, мы откладываем уничтожение и приостанавливаем выполнение JS. Если пользователь вскоре вернется назад, мы снова сделаем страницу видимой и возобновим выполнение JS. Это приводит к почти мгновенной навигации по страницам для пользователя.
Хотя это не требуется спецификацией HTML, браузеры обычно принимают Cache-Control: no-store
в качестве сигнала, чтобы не помещать страницу в bfcache. Это основная причина, по которой bfcache не используется : примерно в 17% истории посещений на мобильных устройствах и в 7% посещений истории на настольных компьютерах. Это означает, что эти страницы не получают преимущества от быстрого восстановления и должны полностью перезагрузить страницу, включая любые сетевые вызовы, выполнение JavaScript и рендеринг.
Часто Cache-Control: no-store
устанавливается, чтобы избежать проблем с кэшированием при изменении сайта, но эта причина менее актуальна, когда используется bfcache, поскольку вся страница восстанавливается почти так, как если бы она все время оставалась открытой.
Как Chrome меняет это поведение
Chrome объявил о намерении изменить это поведение , но относится к этому изменению осторожно. Мы проводим эксперименты, начиная с Chrome 116, и до недавнего времени они проводились при 5 % загрузки страниц.
Мы увеличили этот показатель до 10% загрузок страниц 2 октября и намерены увеличить этот показатель до 20% загрузок страниц в ноябре и до 50% в начале следующего года, а вскоре после этого запустим эту функцию полностью, а некоторые варианты отказа будут обсуждаться далее.
Конфиденциальные данные
Хотя наш анализ показывает, что большинство переходов вперед и назад не содержат конфиденциальных данных и поэтому должны иметь право на использование bfcache, существуют случаи, когда страницы не следует помещать в bfcache. Например, при выходе из системы не должно быть возможности получить страницу входа в систему путем перехода вперед или назад.
Чтобы избежать этого, Chrome будет удалять страницу из bfcache при изменении файлов cookie или других методов авторизации .
Кроме того, использование следующих API для страниц, использующих Cache-Control: no-store
, по-прежнему будет делать эти страницы неприемлемыми для bfcache:
Обратите внимание, что это не полный список API, которые запрещают использование bfcache, а API, которые блокируют bfcache на страницах Cache-Control: no-store
даже если они не используются на момент закрытия страницы.
Тайм-аут bfcache для страниц Cache-Control: no-store
также сокращается до 3 минут (с 10 минут, используемых для страниц, которые не используют Cache-Control: no-store
), чтобы еще больше снизить риск.
Корпоративный выход выбирает
Предприятия часто имеют трудно обновляемое программное обеспечение и общие устройства. Политику AllowBackForwardCacheForCacheControlNoStorePageEnabled
можно отключить, чтобы и дальше предотвращать использование bfcache для Cache-Control: no-store
.
Тестирование изменений
Разработчики могут протестировать это изменение с помощью следующего флага:
--enable-features=CacheControlNoStoreEnterBackForwardCache:level/restore-unless-cookie-change
Если применимо какое-либо из предыдущих исключений — например, изменение файлов cookie — это не позволит странице использовать bfcache по причине «Страницы, основной ресурс которых имеет Cache-Control: no-store
не может войти в обратный/прямой кеш». отображается в тестере bfcache Chrome DevTools .
Вы можете использовать эту тестовую страницу bfcache для тестирования с этим флагом и без него.
Что следует знать разработчикам
Хотя разработчикам не нужно будет вносить какие-либо изменения для своих пользователей, чтобы получить выгоду от более широкого использования bfcache, есть некоторые вещи, которые им, возможно, придется учитывать в результате этого. С такими же соображениями могли столкнуться и другие сайты при первом запуске bfcache в декабре 2021 года.
Влияние на производительность
Причина, по которой мы вносим это изменение, заключается в том, чтобы улучшить удобство использования страниц для пользователей в Интернете. Мы увидели заметные улучшения в Core Web Vitals, когда впервые запустили bfcache, и теперь хотим внедрить те же улучшения на большее количество сайтов.
Владельцы сайтов могут увидеть улучшение своих основных веб-показателей по мере его внедрения и могут измерять использование bfcache в CrUX, в том числе на панели управления CrUX .
Аналитика воздействия
Страницы, восстановленные из bfcache, «восстанавливают» старую страницу (включая кучу JavaScript), а не перезагружают страницу. Многие популярные поставщики аналитики не оценивают восстановление bfcache как новые просмотры страниц, поскольку они запускают просмотры страниц только при их первоначальной загрузке.
Поэтому сайты могут увидеть снижение загрузки страниц в своей аналитике, когда они впервые начинают использовать bfcache. Мы рекомендуем рассматривать их как просмотры страниц, установив прослушиватели события pageshow
и проверив persisted
свойство:
// Send a pageview when the page is first loaded.
gtag('event', 'page_view');
// Send another pageview if the page is restored from bfcache.
window.addEventListener('pageshow', (event) => {
if (event.persisted) {
// Page was restored from bfcache, sent another page view.
gtag('event', 'page_view');
}
});
Обработка обновлений при восстановлении страницы
Поскольку теперь сайты могут видеть использование bfcache, хотя раньше они этого не видели, и когда вместо этого страница будет полностью перезагружена свежими данными, разработчики могут рассмотреть возможность обновления данных при восстановлении bfcache.
Обновления можно запускать аналогично регистрации дополнительных просмотров страниц для аналитики с использованием события pageshow
и проверки persisted
свойства.
Обратите внимание, что не весь контент необходимо обновлять, и пользователи могут предпочесть вернуться к контенту, который они видели ранее. Например, обновление списка статей может означать, что пользователь больше не видит статью, к которой возвращался.
Влияние на рекламу
Подобно влиянию аналитики, на сайтах может наблюдаться снижение количества показов рекламы, если реклама загружается только при загрузке страницы. Объявления можно программно обновлять при восстановлении bfcache, чтобы обеспечить четность при полной загрузке страницы, снова используя событие pageshow
и проверяя persisted
свойство, но это не всегда может быть правильным решением . Инструкции по запуску перезагрузки объявлений см. в документации вашего рекламного провайдера.
Дополнительная информация о bfcache
Дополнительную информацию о bfcache можно найти в нашем подробном техническом руководстве по bfcache .
Обратная связь
Мы с нетерпением ждем отзывов об этом изменении, которые можно предоставить в системе отслеживания проблем Chrome с помощью компонента bfcache .
Заключение
Мы рады представить преимущества bfcache на многих других страницах, чтобы улучшить их удобство для пользователей. Мы тщательно обдумали это изменение и наш подход направлен на то, чтобы внедрить его максимально безопасным способом. Мы надеемся, что представленная здесь информация поможет разработчикам понять это изменение и внести любые необходимые изменения, чтобы избежать проблем, когда это произойдет.