Как Glimpse рассчитывает тайминги для сервера, сети и клиента?

HUD Glimpse обеспечивает очень полезное представление о таймингах — и они, кажется, связаны с различными инструментами разработчика браузера для захвата сети.

Если взять простую реализацию пользовательского HttpModule, как описано здесь автор Phil Haack, я получаю совершенно другое время обработки сервером. Полученные тайминги всегда намного ниже тех, о которых сообщает Glimpse. Glimpse, однако, гораздо ближе к таймингам инструментов браузера.

Glimpse, очевидно, использует гораздо более сложную технику для расчета.

  • Как Glimpse рассчитывает продолжительность времени обработки сервером?
  • Как точно рассчитывается время проводки?
  • Я предполагаю, что все тайминги клиента основаны на прослушивании событий Javascript. Это правильно?

person Jarfish    schedule 05.09.2013    source источник


Ответы (1)


если вы посмотрите на файл glimpse.hud.js, который является частью клиентского файла glimpse.js, отправляемого клиенту, вы увидите, что все тайминги основаны на Navigation Timing API, реализованный браузером.

Время, отображаемое Glimpse в HUD, рассчитывается на основе времени, предоставленного этим API. Итак, первый Glimpse фиксирует эти тайминги

var timingsRaw = (window.performance 
               || window.mozPerformance 
               || window.msPerformance 
               || window.webkitPerformance 
               || {}).timing; 

После чего он начинает вычислять тайминги, которые могут дать некоторую дополнительную информацию о том, где искать проблемы с производительностью (проблема на сервере, на клиенте...)

processTimings = function (details) {
    var result = {},
        networkPre = calculateTimings('navigationStart', 'requestStart'),
        networkPost = calculateTimings('responseStart', 'responseEnd'),
        network = networkPre + networkPost,
        server = calculateTimings('requestStart', 'responseStart'),
        browser = calculateTimings('responseEnd', 'loadEventEnd'),
        total = network + server + browser;
    ...
};

calculateTimings = function (startIndex, finishIndex) {
    return timingsRaw[finishIndex] - timingsRaw[startIndex];
};

Как видите, это также относится к таймингам, показанным для сервера, что объясняет, почему ваши тайминги, которые вы фактически рассчитали на сервере, ниже, чем те, которые показывает Glimpse.

Примечание. Конечно, способ расчета этих временных интервалов применим только к тем, которые отображаются в HUD на вкладке HTTP. Например, время, отображаемое на вкладке Временная шкала, рассчитывается на сервере, поскольку оно показывает время между различными этапами обработки на сервере, которое по очевидным причинам не может быть рассчитано браузером.

Надеюсь, это ответит на ваш вопрос.

person cgijbels    schedule 05.09.2013
comment
Спасибо! Я изо всех сил пытался увидеть деревья из леса. - person Jarfish; 06.09.2013