Производительность API на IE результаты разные значения для каждого вызова - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь получить статистику производительности в IE с помощью кукловода, но после прочтения API, но все еще не ясно, почему результаты двух вызовов так различны. Могу ли я сказать, что значения 'domComplete' и 'requestStart' et c должны быть одинаковыми по всему API? Я не уверен, какие значения взять для тестирования производительности загрузки страницы.

  const getEntriesByTypeNav = JSON.parse(
          await page.evaluate(() => JSON.stringify(window.performance.getEntriesByType("navigation")))
    )[0];

  getEntriesByTypeNav [
  {
    connectEnd: 0.8755,
    connectStart: 0.8755,
    domComplete: 1540.0755,
    domContentLoadedEventEnd: 1508.6755,
    domContentLoadedEventStart: 1246.9755,
    domInteractive: 1246.4755,
    domLoading: 25.9755,
    domainLookupEnd: 0.8755,
    domainLookupStart: 0.8755,
    fetchStart: 0.8755,
    loadEventEnd: 1576.0755,
    loadEventStart: 1546.2755,
    navigationStart: 0,
    redirectCount: 0,
    redirectEnd: 0,
    redirectStart: 0,
    requestStart: 25.5755,
    responseEnd: 63.8755,
    responseStart: 25.9755,
    type: 'navigate',
    unloadEventEnd: 0,
    unloadEventStart: 0,
    duration: 1576.0755,
    entryType: 'navigation',
    name: 'document',
    startTime: 0
  }
]

 const performanceTiming = JSON.parse(
            await page.evaluate(() => JSON.stringify(window.performance.timing))
        );

performanceTiming {
  timing: {
    navigationStart: 1583252459926,
    unloadEventStart: 0,
    unloadEventEnd: 0,
    redirectStart: 0,
    redirectEnd: 0,
    fetchStart: 1583252459926,
    domainLookupStart: 1583252459926,
    domainLookupEnd: 1583252459926,
    connectStart: 1583252459926,
    connectEnd: 1583252459926,
    requestStart: 1583252459951,
    responseStart: 1583252459951,
    responseEnd: 1583252459989,
    domLoading: 1583252459951,
    domInteractive: 1583252461172,
    domContentLoadedEventStart: 1583252461172,
    domContentLoadedEventEnd: 1583252461434,
    domComplete: 1583252461466,
    loadEventStart: 1583252461472,
    loadEventEnd: 1583252461502,
    msFirstPaint: 1583252460688
  }

1 Ответ

2 голосов
/ 04 марта 2020

Причина таких различий заключается в том, что в первом случае startTime равен 0 миллисекундам, а все остальные события - это количество миллисекунд с startTime. Во втором случае значения равны миллисекундам с полуночи 1/1/70, UT C (и выражаются как целые числа, в отличие от первого, что говорит о том, что второй экземпляр является полифилом; просто догадка). Чтобы усложнить ситуацию, во втором случае нет startTime, а ненаселенные свойства, такие как redirectStart, имеют значение 0 - неточное и вводящее в заблуждение.

Итак, сравните яблоки с яблоками. Например, чтобы определить, сколько времени потребуется для стрельбы window.load, в обоих случаях вычтите navigationStart из loadEventEnd. Результаты:

  • Первый экземпляр: 1576.0755 - 0 = 1576.0755
  • Второй экземпляр: 1583252461502 - 1583252459926 = 1576

Тот же номер! Один округленный, а другой нет.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Кроме того, Performance API является ресурсом fantasti c (на мой взгляд недооцененным и недооцененным), но некоторые браузеры поддерживают только это частично (графики совместимости MDN, например, https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming внизу страницы, обычно точны). Таким образом, в зависимости от того, как вы генерируете свой ES5, дружественный к Интернету, «недостающие» части могут быть заполнены или нет, и / или вы можете выполнять свое собственное заполнение. Например, тот факт, что во втором примере все числа округлены до ближайшего целого числа, говорит мне о том, что, возможно, используется полизаполнение - поскольку API производительности основывается на своих значениях времени performance.now(), что возвращает метку времени высокой точности, а не всего целых миллисекунды. Также обратите внимание, что отсутствие поддержки не ограничивается IE - часто Safari (macOS и iOS) очень и очень медленно реализует функции Performance API: раздражает, особенно из-за ВСЕХ iOS браузеров, под капотом. Safari (то есть реализация Performance API не совсем корректна не только в Safari для iOS, но также для Chrome, Firefox и для любых других браузеров, доступных в iOS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...