Я попытался исследовать это немного в Chrome 70. Вот сводка.
Я отслеживаю все запросы на URL https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js, который является критическим сценарием для моего сайта.
TL; DR
Как предполагает Кейси, в файле Chrome HAR нет явного способа определить, что запись была обработана работником службы (насколько яможно увидеть).Я также не смог найти комбинацию существующих полей записи HAR, которая бы положительно идентифицировала запись как обрабатываемую работником службы (но, возможно, такая комбинация существует).
В любом случае этобыло бы полезно для браузеров записывать любые явные связи между записями HAR, чтобы такие инструменты, как HAR Viewer, могли распознавать, что две записи относятся к одному и тому же логическому запросу, и, следовательно, не отображать два запроса в водопаде.
Setup
Очистить кэш, куки и т. Д., Используя расширение Clear Cache.
Первая и вторая записи найдены в HAR
Первая запись (ниже) выглядит как запрос, который выполняется страницей и перехватывается / обрабатывается работником службы.Нет serverIPAddress
и connection
, поэтому мы можем предположить, что это не «реальный» сетевой запрос.
Вторая запись также присутствует в видерезультат начальной загрузки страницы - не было никакого другого обновления / перезагрузки - вы получаете 2 записи в HAR для того же URL-адреса при начальной загрузке страницы (если он проходит через работника службы и достигает сети).
Вторая запись (ниже) выглядит как запрос, сделанный работником сервиса в сеть.Мы видим заполненные поля serverIPAddress
и response.connection
.
Интересное наблюдение здесь состоит в том, что записи №2 startedDateTime
и time
попадают в 'startedDateTime
и time
поля'родительский запрос / запись.
Под этим я подразумеваю, что время начала и окончания записи № 2 полностью совпадает с временем начала и окончания записи № 1.Это имеет смысл, поскольку запись № 2 является своего рода «подзапросом» записи № 1.
Было бы хорошо, если бы в спецификации HAR был способ явно записать эту связь.Т.е. этот запрос-A со страницы привел к тому, что запрос-B был отправлен работником службы.Тогда такой инструмент, как HAR Viewer, не будет отображать две записи для того, что фактически является одним запросом (охватит ли это случай, когда одна выборка, выполненная страницей, приведет к нескольким выборкам работника службы?).эта запись # 1 записывает request.httpVersion
и response.httpVersion
как http/1.1
, тогда как «реальный» запрос используется http/2.0
.
Третья запись (от нажатия Enterв адресной строке после начальной загрузки страницы)
Эта запись появляется в HAR в результате нажатия клавиши ввода в адресной строке.Поле _fromCache
, как и ожидалось, равно memory
, поскольку ресурс в этом случае должен обслуживаться из обычного кэша браузера (ресурс использует cache-control=public, max-age=30672000
).
Вопросы:
- Была ли эта запись 'обработана' событием извлечения работника службы?
- Может быть, когда ресурс находится в кеше памяти, событие службы
fetch
не было запущено? - Или работник службыфактически «прозрачный» здесь?
Нет ожидаемых полей serverIPAddress
или connection
, так как не было «реального» сетевого запроса.
Существует pageref
поле присутствует, в отличие от записи № 2 (запись № 2 была сетевым запросом, инициированным работником службы).
четвертая запись
Подготовка к этомузапись была:
Для этой записи fromCache
установлено disk
. Я предполагаю, что это сталоause service-worker-cache смог удовлетворить запрос.
Не задано поле serverIPAddress
или connection
, но установлено pageref
.
Пятая запись
Подготовительные работы для этой записи:
- Используйте devtools для входа в автономный режим.
Эта запись в основном совпадает с записью # 4.