Производительность дополнений. Часть 1: измерение производительности
В предыдущих статьях мы уже писали о способах, как сделать IE9 гораздо быстрее, например, о новом механизме сценариев, который использует несколько ядер, а также о новой подсистеме рендеринга, использующей выделенную графическую карту на современных ПК. Еще одним аспектом производительности браузера является внешний код, который запускается IE от имени пользователей или в качестве дополнения (add-ons).
Дополнения предоставляют уникальные особенности, которые могут улучшить восприятие интернет-серфинга. Однако они также снижают производительность браузера в такие важные моменты, как переход на другую веб-страницу и открытие новых вкладок. Таким образом, они влияют на основные пользовательские сценарии – запуск и навигацию.
Производительность дополнений является неотъемлемой частью общего пользовательского восприятия работы браузеров. Пользователи IE ожидают, что браузер должен быть быстрым, как при наличии дополнений, так и без них. Мы имеем общие цели с разработчиками дополнений: предоставление им полезных функций, имеющих минимальное влияние на производительность и надежность (подробнее о надежности в следующих статьях).
Эта статья является первой из серии о том, как разработчики могут улучшить производительность дополнений. В ней мы поделимся данными о воздействии дополнений на производительность, а также о том, как IE позволяет пользователям определить влияние дополнений на производительность, а также сохранять контроль над своими компьютерами. Мы опишем пользовательские сценарии, которые важны для измерения производительности, а также вы узнаете, как ее измерять.
Мы хотим, чтобы разработчики дополнений имели всю информацию, которая необходима для создания быстрых и надежных дополнений, соответствующих потребностям пользователей. Мы хотим внести ясность о то, как измерять производительность. Мы просим разработчиков начать измерения производительности своих дополнений уже сегодня и постараться сделать их быстрее.
Что же такое дополнение?
Сегодня дополнения касаются панели инструментов, панели обозревателя и объектов Browser Helper. Когда дополнения включены, они могут оказывать влияние на производительность для каждой открываемой вкладки и каждой страницы, посещаемой пользователем.
Другой часто встречающийся вид расширений – это плагины, в частности, элементы управления ActiveX, например Adobe Flash, Apple QuickTime и Microsoft Silverlight. В отличие от дополнений, которые запускаются в браузере на всех веб-страницах, плагины запускаются внутри веб-страниц и их влияние на производительность является локальным для веб-страниц, которые их используют. В этой статье речь пойдет именно о дополнениях. Разработчики плагинов имеют аналогичные возможности, чтобы сделать работу в Интернете быстрее и надежнее.
Ускорители, WebSlices и поставщики поиска ‑ это третий тип дополнений. Они написаны в чистом формате XML и разработаны так, чтобы не влиять производительность страницы или браузера, надежность и безопасность.
Кнопки панели инструментов являются другим типом расширений, но они влияют на производительность IE, лишь когда пользователи нажимают их и когда связаны с запуском дополнений.
Понимание влияния дополнений на производительность
Ряд исследований касающихся времени отклика сайтов показал, что пользователи замечают задержку продолжительностью свыше 0,2 секунды. Действия, которые происходят быстрее 0,2 секунды, кажутся мгновенными. Сценарии со временем отклика, превышающем этот порог, могут показаться «медленными» для пользователей.
Создание вкладки является одним из таких сценариев. IE инициализирует дополнение каждый раз, когда пользователь создает новую вкладку, чтобы убедиться, что дополнения могут взаимодействовать с веб-страницой правильно (например, дополнение Skype IE, которое определяет номера телефонов и делает их кликабельными). Когда пользователь запускает новый экземпляр IE, одна из первых вещей, которую делает IE –создание новой вкладки, что, в свою очередь, инициализирует все пользовательские дополнения. Время, необходимое каждому дополнению для инициализации – это время загрузки, и, как правило, оно зависит от количества кода, которое дополнение выполняет во время процедуры инициализации.
По данным нашей телеметрии, более чем у 95% сегодняшних пользователей IE8 установлено, по крайней мере, одно дополнение, а в среднем у пользователей установлено по 9 дополнений. Если загрузка каждого дополнения занимает более 20 миллисекунд, создание новой вкладки будет занимать заметно больше времени, чем обычно.
Следующая диаграмма показывает среднее время загрузки 50 новейших версий наиболее часто используемых в IE дополнений. Пользователи, которые установили многие из этих дополнений, безусловно, заметили влияние на производительность при запуске IE или создании новой вкладки:
Это всего лишь 50 самых популярных дополнений. Многие дополнения, которые не перечислены выше, могут также влиять на производительность при создании вкладки. Мы рекомендуем пользователям устанавливать новые версии дополнений, поскольку они обычно имеют лучшую производительность.
Конечные пользователи и время загрузки дополнений
Что важно для отдельных пользователей – так это его или ее собственный опыт, а не данные экосистем. В IE8 мы ввели функцию, которая позволит пользователям понять, как их дополнения влияют на производительность браузера.
IE замеряет время загрузки для каждого включенного дополнения каждый раз, когда IE инициализирует его. В диалоге Управление надстройками , IE показывает среднее время загрузки для каждого дополнения на основании последних 10 инициализаций. Вы можете получить доступ к Управлению надстройками с помощью диалогового меню «Инструменты».
Имея эту информацию под рукой, пользователи могут выбирать дополнения, которые они хотят сохранять включенными, а также осуществлять контроль за их выполнением:
Разработчики и время загрузки дополнений
Мы собрали данные телеметрии по времени загрузки всех дополнений, которые установили пользователи IE, чтобы оценить их характеристики. Следующая диаграмма показывает распределение времени загрузки всех дополнений, с которыми имеют дело пользователи IE8:
Хотя большая часть дополнений загружается менее чем за 100 миллисекунд, 25% дополнений загружаются дольше 200 миллисекунд. Пользователи заметят существенное влияние на производительность в таких ситуациях, тем более, если некоторые из их дополнений загружаются еще дольше. Измерение производительности дополнений позволит вам определить, насколько часто происходит загрузка за еще большее время.
Давайте рассмотрим некоторые конкретные примеры медленных дополнений из наших измерений, а также некоторые из причин, почему эти дополнения имеют такое большое влияния на производительность IE во время создания вкладки. Если вы разработчик дополнений, и хотели бы получить информацию о времени загрузки для дополнений, вы можете написать нам по адресу ieaddonp@microsoft.com.
Пример дополнения № 1
Пользователи, установившие это дополнение, отмечают заметные задержки при создании закладки. В основном время загрузки этого дополнения превышает 200 миллисекунд. Амплитуды кривой выше, чем на предыдущей диаграмме. Дальнейшее расследование показало, что этого дополнения, как правило, работает больше кода, чем это минимально необходимо во время инициализации.
Пользователи этого дополнения обычно отмечают заметные задержки при создании вкладки. В большинстве случаев время превышает 200 миллисекунд. Амплитуды кривой выше, чем на предыдущей диаграмме. Дальнейшее расследование показало, что это дополнение обычно выполняет больше кода, чем минимально необходимо для инициализации.
Пример дополнения № 2
Это дополнения также влияет на производительность при создании вкладки, что следует из большинства загрузок со временем более 200 миллисекунд. Мы обнаружили, что дополнение осуществляет операции, занимающие очень много времени (600-1500 миллисекунд). Мы рекомендуем убрать эти операции из обычной инициализации для ускорения создания вкладки.
Пример дополнения № 3
Хотя распределение времени загрузки для этого дополнения отличается от других, оно также влияет на быстродействие при создании вкладки. Мы исследовали причины равномерного распределения загрузки за 100 миллисекунд, и обнаружили, что дополнение во время инициализации совершает сетевые вызовы. Поскольку сетевые вызовы занимают переменное время для завершения, зависящее от скорости соединения и локали, дополнение должно воздерживаться от совершения вызовов внутри сети в процессе инициализации. Мы рекомендуем оформлять эти вызовы фоновым процессом немного позже.
Понятно, что некоторые пользователи IE8 испытывают значительные проблемы с производительностью при создании вкладок. Разработчики, которые повышают производительность своих дополнений, делают важный шаг в направлении улучшения производительности IE для конечных пользователей. В то же время мы знаем, что влияние дополнений выходит за рамки создания вкладки. Давайте посмотрим на другие варианты более подробно.
Рекомендации разработчикам дополнений
В этой статье, мы ориентируемся на понимание и определение сценариев с точки зрения времени включения дополнения. Существуют и другие показатели, которые также важны, такие как процессорное время (количество времени, которое процессор затратил для завершения сценария) и физическая память (объем памяти, необходимый для запуска сценария). Мы рассмотрим эти два показатели в следующей статье.
Создание вкладки и навигация по веб-странице – вот два наиболее актуальных сценария для производительности IE. Дополнения оказывают огромное влияние на производительность этих сценариев, потому что они могут блокировать завершение браузером IE пользовательской задачи. В зависимости от того, как разработчик написал дополнение, IE, возможно, придется ждать пока дополнение закончит выполнение кода, и лишь тогда IE сможет завершить создание вкладки или перейти на новую веб-страницу.
Мы рекомендуем разработчикам начать измерения производительности в следующих двух сценариях:
1. Создание, переключение и закрытие вкладки
Некоторые дополнения совершают сетевые вызовы во время создания вкладки (что заставляет пользователей ждать), или сохраняют своё состояние (с записью и чтением реестра) когда пользователь закрывает вкладку, или перерисовывают свой интерфейс при переключении вкладок.
Так как дополнения могут прервать IE при обработке запроса пользователя на создание вкладки, переключении между вкладками, или же при закрытии их, дополнения могут сделать эти операции совсем не мгновенными.
2. Навигация по страницам
Когда пользователь переходит на другую веб-страницу, Internet Explorer запускает набор браузерных событий. Дополнения могут выполнить программный код в ответ на эти события. Дополнения, которые обрабатывают одно или несколько из этих событий могут задержать пользователей с их навигацией по веб-странице. Поэтому замедляется открытие страниц, от которых пользователи ожидают мгновенности: например результаты поиска или котировки на фондовом рынке. Вот некоторые примеры:
– BeforeNavigate: дополнение безопасности проверяет URL, прежде чем перейти на страницу.
– DocumentComplete: После окончания загрузки веб-страницы, дополнение сканирует её, чтобы добавить кнопку электронной почты для запуска пользовательского почтового приложения
– NavigateError: Если ошибка появляется во время навигации по веб-странице, дополнение перенаправляет пользователя на специальную страницу ошибки.
Учитывая, насколько важна для пользователей производительность, понятно, что прозрачность и контроль дополнений будут также существенны для них.
Мы также рекомендуем разработчикам дополнений оценивать и оптимизировать производительность дополнений с помощью общедоступных средств Windows Performance Tools.
Особенности измерения производительности дополнений с помощью Windows Performance Tools
Недавно в своем блоге мы писали о том, как измерять производительность браузера с помощью Windows Performance Tools. Разработчики дополнений используют эти инструменты для измерения различных характеристик производительности браузера с включенными дополнениями. Вот список того, что вы можете предпринять, чтобы измерить производительность сценариев создания и закрытия вкладки с помощью Windows Performance Tools
1. Запустите командную строку с правами администратора и выполните следующую команду, чтобы начать отслеживать производительность и записывать результаты в файл (например, AddonTrace.etl):
xperf -start browselog -on Microsoft-IEFRAME -f AddonTrace.etl
2. Убедитесь, что ваши дополнения включены.
3. Запустите Internet Explorer и откройте вашу домашнюю страницу. Подождите несколько секунд после завершения навигации, а затем откройте несколько новых вкладок.
4. Закрывайте каждую вкладку по порядку, пока окно браузера не закроется.
5. Остановите отслеживание командой
xperf -stop browselog
6. Преобразуйте содержимое .etl-файла в текстовый файл, который можно проанализировать и по которому можно выполнить измерения
xperf -i AddonTrace.etl -o AddonTrace.txt
Далее, проверьте текст файла, чтобы найти следующие пары ETW-событий, которые соответствуют сценариям. Чтобы узнать время события, вычитайте из времени окончания события время его начала:
Сценарий | Начало события | Конец события |
Создание вкладки | CoCreateInstance(): | CoCreateInstance(): |
(время загрузки) | Microsoft-IEFRAME/ExtensionCreate/Start | Microsoft-IEFRAME/ExtensionCreate/Stop |
Закрытие вкладки | SetSite(NULL): | SetSite(NULL): |
Microsoft-IEFRAME/ExtensionSetSiteNull/Start | Microsoft-IEFRAME/ExtensionSetSiteNull/Stop |
Кроме того, можно использовать Windows Performance Tools для измерения производительности дополнений в других сценариях, которые мы описали выше. Ниже представлены ETW-события, которые соответствуют другим сценариям:
Сценарий | Начало события | Конец события |
Переключение вкладки | Microsoft-IEFRAME/ LeftButtonAction/win:Info | Следующий порядок событий: Microsof-IEFRAME/ Browseui_Tabs_SwitchTabs/win:Stop; Microsoft-IE/ MSHTML_CDOC_ONPAINT/win:Stop; Microsoft-IEFrame/ Browseui_Tabs_WaitMessage/win:Start |
Навигация по странице | Microsoft-IEFRAME/ FRAME_URLENTERED/win:Info | Следующий порядок событий: Microsoft-IE/MSHTML_CMARKUP_ONLOADSTATUSDONE/win:Info Microsoft-IE/ MSHTML_CDOC_ONPAINT/win:Stop Microsoft-IEFrame/ Browseui_Tabs_WaitMessage/win:Start |
Мы рекомендуем выполнить эти тесты в условиях фиксированного окружения со множеством самых популярных сайтов, чтобы реально оценить результаты работы. Кэширование этих сайтов на прокси-серверах позволяет свести к минимуму различия в содержании сайта. Мы также рекомендуем запускать эти тесты на нескольких различных конфигурациях ПК.
Производительность дополнений – наше общее дело
Производительность важна для конечных пользователей: они обращают на нее внимание и принимают меры для получения более высокой производительности.
Мы рекомендуем пользователям смотреть на эффективность воздействия различных дополнений, установленных на ПК, используя диалоговое окно IE8 Управление надстройками. Эта информация помогает пользователям сохранять контроль при использовании желаемых дополнений.
Мы также рекомендуем разработчикам дополнений, сделать свои решения проще для конечных пользователей, написав более быстрые дополнения. Мы рекомендуем разработчикам начать измерения производительности с помощью Windows Performance Tools, следуя указаниям этой статьи. Измерьте производительность на кэшированных веб-сайтах и различных конфигурациях ПК. Хотя измерения времени загрузки дополнений служат показателем для конечных пользователей, мы рекомендуем измерять производительность во всех сценариях с использованием вкладок, а также при навигации.
С помощью этих измерений и нашего руководства, вы сможете настроить свое дополнение для лучшей производительности. Если вы произведете оптимизацию или найдете приемы эффективной работы, мы призываем вас поделиться информацией с сообществом разработчиков, оставив комментарии.
Улучшение производительности дополнений имеет ключевое значение для быстрого и надежного серфинга, ведь мы все вместе хотим этого. Мы хотим, чтобы пользователи IE наслаждались функциональностью и высокой производительностью своего браузера.
Герман Нг (Herman Ng)