Почему значения интерфейса PerformanceResourceTiming отличаются от значений браузера?

Я написал скрипт, который запускается в домене и извлекает изображения из других доменов (сторонние ресурсы).

Я пытаюсь использовать window.performance.getEntriesByType('resource') чтобы получить общую проверку здоровья вещей. Кажется, поскольку эти ресурсы находятся в других доменах, ответы должны быть Timing-Allow-Origin установить в заголовке ответа, чтобы получить данные о времени через window.performance.getEntriesByType(),

Это правда?

Кроме того, когда я запускаю свой скрипт, браузер Chrome возвращает полезную информацию. Действительно, я мог бы использовать эти данные, если бы мог получить их программно. Но данные Chrome отображают и данные возвращаются в window.performance.getEntriesByType() отличаются.

Я приложил скриншот, который показывает Chromes полезную временную разбивку загрузки ресурса. По производительности записи данные объекта не совпадают.

Например, посмотрите время DNS Lookup на временном графике справа, а затем посмотрите на значения domainLookupStart и domainLookupEnd в объекте входа производительности. Эти значения не совпадают друг с другом.

Почему есть расхождение и как я могу получить данные Chrome? Как узнать, что Chrome отображает из объекта ввода производительности?

Спасибо!

График времени загрузки ресурсов Chrome

1 ответ

Вы, наверное, уже поняли это, но у меня был похожий вопрос, и я нашел это.

Самые подробные поля в PerformanceResourceTiming нулевой отчет об объекте для ресурсов между источниками, которые не устанавливают Timing-Allow-Origin заголовок согласно спецификации:

connectStart должен возвращать ноль, если не пройден алгоритм проверки синхронизации.

Аналогично для других полей, таких как поля поиска DNS.

Что касается того, почему консоль разработчика позволяет вам видеть эту информацию, даже если вы не можете получить к ней программный доступ, это просто особенность Chrome, которая позволяет вам просматривать эту информацию. Сокрытие это больше вежливость, чем функция безопасности; спецификация определяет, что может быть передано через Resource Timing API, но браузер по-прежнему имеет доступ к информации и, как вы уже видели, может решить поделиться ею с пользователем другими способами.

Другие вопросы по тегам