Почему значения интерфейса PerformanceResourceTiming отличаются от значений браузера?
Я написал скрипт, который запускается в домене и извлекает изображения из других доменов (сторонние ресурсы).
Я пытаюсь использовать window.performance.getEntriesByType('resource')
чтобы получить общую проверку здоровья вещей. Кажется, поскольку эти ресурсы находятся в других доменах, ответы должны быть Timing-Allow-Origin
установить в заголовке ответа, чтобы получить данные о времени через window.performance.getEntriesByType()
,
Это правда?
Кроме того, когда я запускаю свой скрипт, браузер Chrome возвращает полезную информацию. Действительно, я мог бы использовать эти данные, если бы мог получить их программно. Но данные Chrome отображают и данные возвращаются в window.performance.getEntriesByType()
отличаются.
Я приложил скриншот, который показывает Chromes полезную временную разбивку загрузки ресурса. По производительности записи данные объекта не совпадают.
Например, посмотрите время DNS Lookup на временном графике справа, а затем посмотрите на значения domainLookupStart и domainLookupEnd в объекте входа производительности. Эти значения не совпадают друг с другом.
Почему есть расхождение и как я могу получить данные Chrome? Как узнать, что Chrome отображает из объекта ввода производительности?
Спасибо!
1 ответ
Вы, наверное, уже поняли это, но у меня был похожий вопрос, и я нашел это.
Самые подробные поля в PerformanceResourceTiming
нулевой отчет об объекте для ресурсов между источниками, которые не устанавливают Timing-Allow-Origin
заголовок согласно спецификации:
connectStart должен возвращать ноль, если не пройден алгоритм проверки синхронизации.
Аналогично для других полей, таких как поля поиска DNS.
Что касается того, почему консоль разработчика позволяет вам видеть эту информацию, даже если вы не можете получить к ней программный доступ, это просто особенность Chrome, которая позволяет вам просматривать эту информацию. Сокрытие это больше вежливость, чем функция безопасности; спецификация определяет, что может быть передано через Resource Timing API, но браузер по-прежнему имеет доступ к информации и, как вы уже видели, может решить поделиться ею с пользователем другими способами.