Подтвердить что ты не робот

Почему Chrome тратит время на загрузку контента из кеша?

Я обслуживаю статический контент, предназначенный для кеширования браузером на неопределенный срок. Chrome кэширует его, как ожидалось, но все еще тратит время на его загрузку. Я использую Chrome 46.0.2490.71.

вкладка сети Chrome

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

Вот релевантная информация о временной шкале от загрузки страницы в режиме инкогнито:

вкладка временной шкалы Chrome

Поля "Общее время" и "Время события" для каждого из этих событий равно нулю. Реплицируя это с файлом, обслуживаемым локально (но все же из кеша), событие "Получить данные" отображается только один раз.

Несколько интересных замечаний:

  • Обслуживание одного и того же файла с моего локального компьютера с той же кодировкой не приводит к той же загрузке.
  • Переход в режим инкогнито (без расширений) уменьшает задержку загрузки, но не устраняет его.
  • Быстрее обновить страницу, так как для получения 304 ответа с сервера требуется меньше времени, чем просто загрузить его из кеша.
  • Закрытие инструментов dev не влияет на задержку.
  • IE 11, Edge и Firefox 41 не показывают никаких задержек.

Какие возможные причины могут быть?

4b9b3361

Ответ 1

Итак, это связано с тем, как кеширование работает в Chrome. У меня нет личного опыта работы с кодовой базой Chrome, но я немного знаю об этой теории. (Я также нашел ссылку на реализацию кэша Chrome здесь для более любопытных: хром-кеш диска)

Для справки, вот скриншот моей загрузки вашего фактического вопроса о переполнении стека в Chrome с открытой панелью Сеть, а параметр Network Throttling установлен на "Offline". Обратите внимание, что каждая запись в этом списке получена из кеша!

Imgur screencap

Вы также заметите, что Chrome тратит время на загрузку каждого файла. Почему это? Кэш Chrome - это база данных, и эта база данных также сжимается для экономии места. Когда вы извлекаете документ из кеша, цена этого поиска не равна нулю. Chrome должен искать элемент в базе данных кэша, а затем раздувать эту запись в памяти, чтобы Chrome мог работать с ней. Я не знаю точных сведений о том, как показывает панель Chrome-dev-tools в сети, но я бы предположил, что получение этого файла с диска, его разжатие, а затем анализ и работа с результатом - это то, что вы видите отражено в "Время скачено".

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