Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

02.07.2010 17:01 | Sibiryak

Мы стараемся сделать Internet Explorer 9 поразительно быстрым, и также хотим помочь веб-разработчикам сделать быстрыми их веб-узлы. Для того, чтобы повысить скорость работы в сети и сделать возможным новый класс приложений HTML5, крайне важным является позволить разработчикам точно измерять производительность своих веб-сайтов. На Velocity мы анонсировали, что Internet Explorer 9 станет первым браузером, предоставляющим сведения о быстродействии разработчикам в режиме реального времени, что мы и представили в последней предварительной версии IE9 Platform Preview. Особая благодарность Стиву Содерсу (Steve Souders) и Жиэнг Вонг (Zhiheng Wang) из Google, команде разработчиков WebKit и Mozilla.

Измерение производительности веб-узлов в реальных условиях является сегодня достаточно хлопотным и приводящим к ошибкам занятием. Разработчики вынуждены использовать такие приемы, как добавление в свой код штампов времени низкого разрешения JavaScript, которые замедляют работу страниц для конечных пользователей, добавляют эффект наблюдателя и возвращают неточные результаты, что может привести к неверному поведению.

Браузер точно знает, сколько времени у него заняли загрузка и исполнение веб-страницы, поэтому мы уверены, что именно браузер должен предоставить разработчикам API для доступа к этим результатам производительности. Веб-разработчики не должны задумываться над тем, как им измерять быстродействие - эта возможность просто должна быть доступна для них.

Важно, что бы этот API был совместим со всеми браузерами и платформами, и разработчики могли положиться на его результаты. Спецификации Web Timing, представленные W3C, являются хорошей основой для решения этой проблемы совместимым образом. Реализация, которую вы найдете в последней предварительной версии IE9, основана на разделе спецификаций Web Timings, посвященном навигации. Мы приступили к переговорам с W3C и производителями других браузеров по поводу совместной работы над распространением и обеспечением широкой поддержки Web Timing.

Давайте подробнее рассмотрим, как разработчики вынуждены измерять быстродействие сегодня и что позволяют новые API.


Как разработчики измеряют производительность сегодня
Сегодня, чтобы собрать метрические показатели быстродействия, веб-разработчики должны разместить в своем коде, в ключевых местах веб-страницы, специальные временные маркеры. Такой код может противоречить рекомендациям по быстродействию. Разработчики пишут код, похожий на нижеприведенный:

<html>
    <head>
        <script type="text/javascript">
        var start = (new Date).getTime();
        </script>
    </head>
    <body>
        <script type="text/javascript">
        /* do work here */
        var pageLoad = (new Date).getTime() - start;
        </script>
    </body>
</html>


В таком подходе имеется ряд проблем. Он приводит к более раннему запуску JavaScript-движка. Он приводит к смене окружения парсеров HTML и JavaScript. Он может препятствовать загрузке оставшихся ресурсов параллельными запросами.

Также следует упомянуть, что вышеописанный подход с использованием JavaScript не учитывает время сетевых задержек, то есть время от момента запроса документа с сервера до момента его получения и отображения на экране конечного пользователя.

Кроме этого, несмотря на то, что функция Date доступна во всех браузерах, точность результатов может отличаться. Джон Ресиг (John Resig) опубликовал хорошую статью, в которой он проводит ряд измерений, показывающих, что время от (new Date).getTime(); в среднем составляет для браузеров 7,5 мс, что является половиной временного промежутка системного таймера Windows, составляющего 15 мс. Многие операции могут исполняться меньше, чем за 1 мс, то есть ошибка в некоторых измерениях может составить до 750%!


Как разработчики смогут измерять производительность с Internet Explorer 9
В третьей предварительной версии Internet Explorer 9 Platform Preview имеется прототипная реализация интерфейса Web Timings NavigationTiming под именем window.msPerformance.timing. Сразу скажем, что мы используем префикс производителя (ms) в имени, поскольку спецификации находятся в разработке. На данный момент не существует других реализаций и отсутствует совместимость с другими браузерами. Этот интерфейс записывает основную информацию о времени загрузки корневого документа с точностью до миллисекунды, которая доступна посредством DOM сразу же по завершении загрузки страницы.

window.msPerformance.timing

interface MSPerformanceTiming{
     readonly attribute unsigned longlong navigationStart;
     readonly attribute unsigned longlong fetchStart;
     readonly attribute unsigned longlong unloadStart;
     readonly attribute unsigned longlong unloadEnd;
     readonly attribute unsigned longlong domainLookupStart;
     readonly attribute unsigned longlong domainLookupEnd;
     readonly attribute unsigned longlong connectStart;
     readonly attribute unsigned longlong connectEnd;
     readonly attribute unsigned longlong requestStart;
     readonly attribute unsigned longlong requestEnd;
     readonly attribute unsigned longlong responseStart;
     readonly attribute unsigned longlong responseEnd;
     readonly attribute unsigned longlong domLoading;
     readonly attribute unsigned longlong domInteractive;
     readonly attribute unsigned longlong domContentLoaded;
     readonly attribute unsigned longlong domComplete;
     readonly attribute unsigned longlong loadStart;
     readonly attribute unsigned longlong loadEnd;
     readonly attribute unsigned longlong firstPaint;
     readonly attribute unsigned longlong fullyLoaded;
}


Сначала веб-разработчики могут с точностью узнать, сколько времени занимает загрузка их страницы на компьютерах пользователей. У них есть доступ к информации о времени начала перехода на страницу (navigationStart), о сетевых задержках, связанных с загрузкой страницы (responseEnd - fetchStart) и о времени, затраченном на загрузку страницы в самом браузере.

Разработчики могут воспользоваться этой информацией для достижения максимального быстродействия в режиме реального времени и использовать свой любимый интерфейс сериализации для упаковки этих данных и их хранения на сервере с целью установления тенденций быстродействия.

С JSON это будет выглядеть следующим образом:

JSON.Stringify(window.msPerformance);


Другая полезная функция window.msPerformance - это возможность запросить только время, затраченное на важных стадиях загрузки документа, под названием timingMeasures.

window.msPerformance.timingMeasures

interface MSPerformanceTimingMeasures{
     readonly attribute unsigned longlong navigation;
     readonly attribute unsigned longlong fetch;
     readonly attribute unsigned longlong unload;
     readonly attribute unsigned longlong domainLookup;
     readonly attribute unsigned longlong connect;
     readonly attribute unsigned longlong request;
     readonly attribute unsigned longlong response;
     readonly attribute unsigned longlong domLoading;
     readonly attribute unsigned longlong domInteractive;
     readonly attribute unsigned longlong domContentLoaded;
     readonly attribute unsigned longlong domComplete;
     readonly attribute unsigned longlong load;
     readonly attribute unsigned longlong firstPaint;
     readonly attribute unsigned longlong fullyLoaded;
}


Просто обратитесь к window.msPerformance.timingMeasures.navigation по завершении загрузки страницы и вы узнаете время, затраченное на выполнение перехода к загруженному документу.

Наконец, интерфейс window.msPerformance.navigation содержит сведения о типе перехода и дополнительной сетевой активности, имевшей место на странице, помогающие понять общую картину перехода.

window.msPerformance.navigation

interface MSPerformanceNavigation{
     const unsigned short NAVIGATION = 0;
     const unsigned short RELOAD_BACK_FORWARD = 1;

     readonly attribute unsigned longlong type;
     readonly attribute unsigned longlong redirectedCount;
     readonly attribute unsigned longlong uniqueDomains;
     readonly attribute unsigned longlong requestCount;
     readonly attribute unsigned longlong startTime;
}



Взглянем на это в действии
На нашем веб-сайте IE9 Test Drive вы можете испытать демо window.msPerformance. Там вы можете увидеть визуализацию времени загрузки демонстрационной страницы, как это показано ниже.


В этом примере все время с момента щелчка по ссылке до времени окончания загрузки содержимого в Platform Preview заняло 111 мс.


Испытайте сами!
Все описанное выше доступно прямо сейчас в третьей предварительной версии. Загрузите ее самостоятельно по адресу http://ietestdrive.com и испытайте демо window.msPerformance. Этот интерфейс является прототипом рабочего проекта. API может измениться, но мы хотим сделать его доступным так рано, чтобы разработчики смогли его использовать и сообщать свои отзывы. Пожалуйста, испытайте интерфейс window.msPerformance, и сообщите нам, что вы думаете, посредством Connect.

Андерсон Квах (Anderson Quach),
Руководитель команды разработчиков Internet Explorer


Источник: http://blogs.msdn.com/ieru
Перевод: Sibiryak

Комментарии

Не в сети

будем пользоваться

03.07.10 07:04
0
Не в сети

Переовод: Sibiryak

04.07.10 20:42
0
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.04 секунд (Общее время SQL: 0.024 секунд - SQL запросов: 55 - Среднее время SQL: 0.00043 секунд))
Top.Mail.Ru