Измерение производительности веб-страниц в IE9
Мы стараемся сделать 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) опубликовал хорошую статью, в которой он проводит ряд измерений, показывающих, что время от (newDate).getTime(); в среднем составляет для браузеров 7,5 мс, что является половиной временного промежутка системного таймера Windows, составляющего 15 мс. Многие операции могут исполняться меньше, чем за 1 мс, то есть ошибка в некоторых измерениях может составить до 750%! Как разработчики смогут измерять производительность с Internet Explorer 9 В третьей предварительной версии Internet Explorer 9 Platform Preview имеется прототип интерфейса Web Timings Navigation Timing под именем 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; } Сначала веб-разработчики могут точно узнать, сколько времени занимает загрузка их страницы на компьютерах пользователей. У них есть доступ к информации о времени начала перехода на страницу (navigation Start), о сетевых задержках, связанных с загрузкой страницы (response End–fetch Start) и о времени, затраченном на загрузку страницы в самом браузере. Разработчики могут воспользоваться этой информацией для достижения максимального быстродействия в режиме реального времени и использовать свой любимый интерфейс сериализации для упаковки этих данных и их хранения на сервере с целью установления тенденций быстродействия. С 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 мс. Попробуйте сами! Все описанное выше доступно прямо сейчас в третьей предварительной версии. Загрузите ее самостоятельно по адресу https://ietestdrive.com и запустите демонстрацию window.msPerformance. Этот интерфейс является прототипом рабочего проекта. API может измениться, но мы хотим сделать его доступным так рано, чтобы разработчики смогли его использовать и сообщать свои отзывы. Пожалуйста, попробуйте интерфейс window.msPerformance, и сообщите нам, что вы думаете, через службу Connect. Андерсон Квах (Anderson Quach), Руководитель команды разработчиков Internet Explorer |