Планирование производительности

Applies to Windows and Windows Phone

Сильнее всего пользователей раздражают медленные, не отвечающие на действия вовремя, быстро поглощающие заряд батареи приложения. Быстрые приложения с высокой скоростью отклика, не потребляющие электроэнергию впустую, поддерживают интерес и удовлетворенность пользователей. Не забывайте о производительности при планировании своих приложений Магазина Windows.

Производительность требует заблаговременного планирования, разработки и тестирования, как и все прочие возможности приложений. Следуйте данному процессу в планировании производительности для приложений.

  1. Сформулируйте цели по производительности для приложений.
  2. Разрабатывайте приложения с учетом обеспечения производительности.
  3. Инструментируйте свои приложения для обеспечения производительности.
  4. Тестируйте и оценивайте приложения на соответствие целям по производительности.
  5. Проверьте все пункты и улучшите структуру приложений на основе результатов тестирования производительности.

Вот некоторые подробности по каждому из этапов этого процесса.

Формулировка целей по производительности приложений

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

Быстрота

Одним из начальных подходов является оценка допустимых для пользователей временных диапазонов выполнения задач в вашем приложении. Мы называем эти временные диапазоны классами взаимодействий. Для каждого из этих классов можно назначить, к примеру, метку, восприятие пользователем, целевой период времени и максимальный период времени. Вот некоторые предлагаемые классы взаимодействий с примерами для каждого из них.

Метка класса взаимодействияВосприятие пользователяЦельМаксимумПримеры
БыстроеМинимально заметная задержка100 миллисекунд200 миллисекундВывод панели приложения; нажатие кнопки (первая реакция)
ОбычноеНе очень быстрое300 миллисекунд500 миллисекундИзменение размера; контекстное масштабирование
Хорошая скорость откликаНе быстро, но скорость отклика кажется хорошей500 миллисекунд1 секундаПереход на другую страницу; возобновление работы приложения после приостановки
ЗапускПриемлемое взаимодействие1 секунда3 секундыЗапуск приложения в первый раз или после прерывания работы ранее
С задержкойОтклик более не кажется хорошим500 миллисекунд5 секундСкачивание файла из Интернета
ЗатянутоСлишком долго; пользователь может переключиться на что-то еще500 миллисекунд10 секундУстановка нескольких приложений из Магазина Windows

 

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

СценарийМомент во времениВзаимодействие с пользователемКласс взаимодействия
Переход на страницу рецепта Первая реакцияНачало анимации перехода страницыБыстро (100–200 миллисекунд)
Хорошая скорость откликаСписок ингредиентов загружен; без изображенийХорошая скорость отклика (от 500 миллисекунд до 1 секунды)
Все стало видимымВсе содержимое загружено; изображения показаныС задержкой (500 миллисекунд — 5 секунд)
Поиск рецептаПервая реакцияКнопка "Поиск" нажатаБыстро (100–200 миллисекунд)
Все стало видимымЛокальный список названий рецептов показанОбычно (300–500 миллисекунд)

 

Создание набора сценариев производительности улучшает возможности по тестированию, анализу и улучшению быстродействия приложения.

Динамичность

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

  • Отсутствие видимых прекращений и возобновлений обновления экрана (сбоев).
  • Анимации экрана производятся на 60 кадрах в секунду (кадр/с), с 16 миллисекундами работы ЦП и графического процессора на кадр.
  • Когда пользователь пролистывает страницы в вашем приложении, вы должны нацеливаться на представление от 3 до 6 страниц содержимого в секунду.

Эффективность

Чтобы обеспечить эффективность работы, конкретные измеримые цели производительности для приложения могут включать:

  • Максимально возможное использование ресурсов не может превышать указанных процентов ресурсов ЦП и памяти в мегабайтах.
  • Когда пользователь не использует приложение, оно не должно потреблять ресурсов.

Уменьшение потребления заряда батареи

Большая часть выполняемой вами производительной работы в действительности уменьшает энергопотребление вашего приложения. Главным потребителем заряда батарей автономных устройств является ЦП — даже при низкой его загруженности. Windows 8 пытается поддерживать ЦП в состоянии низкого энергопотребления, когда он не задействован, и активирует его каждый раз, когда вы планируете работу. Вы можете еще больше снизить энергопотребление вашего приложения, если гарантируете, что, когда ЦП неактивен, оно не планирует работу без необходимости. Например, если приложение собирает данные от веб-служб или датчиков (например, датчиков глобальной навигационной системы GPS). Учитывайте потребление заряда батареи, когда будете решать, как часто собирать данные.

Это важно также для средств анимации, которые требуют постоянного обновления экрана и держат ЦП и графический конвейер в активном состоянии. Средства анимации в значительной мере способствуют эффектному взаимодействию с пользователем, однако примите разумные решения по их использованию. Прежде всего это важно для приложений, управляемых данными, в которых пользователь обычно просматривает результаты работы приложений, но не взаимодействует с ними. Например, пользователь может просматривать фотографии в приложении для отображения фотографий или читать тексты в новостном приложении. Также излишне применять анимацию в режиме быстрого просмотра, поскольку при этом пользователь не уделяет ей должного внимания.

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

Сокращение потребления памяти

Уменьшение потребления памяти помогает избежать замедления работы системы, а для приложений Магазина Windows это важно также из-за системы управления жизненным циклом процесса (PLM). Система управления жизненным циклом процесса определяет, какое из приложений следует завершить, во многом руководствуясь объемом памяти, который используют приложения. Минимизируя занимаемый приложением объем памяти, вы снижаете вероятность его завершения, когда оно не используется. К примеру, вы можете сократить используемый объем памяти приложения освобождением ненужных ресурсов, таких как изображения, при приостановке работы.

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

После установки целей в области производительности их можно использовать как ориентиры при разработке приложения.

Разрабатывайте приложения с учетом обеспечения производительности.

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

Несколько страниц содержимого

Методики разработки и кодирования для обеспечения производительности при отображении нескольких страниц содержимого включают:

  • Использование для списков и сеток виртуализации с элементами постоянного размера там, где это возможно. Подробнее: Использование виртуализации для списка или сетки.
  • Разработка приложений, у которых только первая страница пользовательского интерфейса реагирует на действия пользователя. Отказ от загрузки дополнительных частей пользовательского интерфейса там, где это не требуется.
  • Откладывание работы с низким приоритетом. Подробности для приложений Магазина Windows на JavaScript можно найти в описании пространства имен WinJS.Utilities.Scheduler и в образце планировщика на HTML. О приложениях Магазина Windows на C++, C# или Visual Basic см. в разделе Асинхронное программирование, в описании свойства Dispatcher, класса CoreDispatcher и в разделе Образец нескольких представлений.
  • Свертывание содержимого, пока оно не потребуется пользователю. Дополнительные сведения для приложений Магазина Windows на JavaScript см. в описании свойства display для display:none. О приложениях Магазина Windows на C++, C# или Visual Basic см. в описании свойства Visibility для Collapsed.

Разнообразие визуальных элементов и функций

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

  • Откладывание загрузки пользовательского интерфейса и кода по мере возможности.
  • Использование не требующего написания кода пользовательского интерфейса— в форме больших фрагментов жестко заданного кода HTML или XAML, которые среда выполнения может загружать пакетами по мере доступности—.
  • Четкое разделение функций в вашем приложении и загрузка минимально возможного объема элементов.
  • Отображение части пользовательского интерфейса для пользователей в несколько этапов.
  • Изображения должны загружаться такого размера, который подходит для отображения в том представлении, в котором вы их выводите, с помощью метода GetThumbnailAsync.
  • Использование анимаций CSS, пространства имен WinJS.UI.Animation или и того, и другого для приложений Магазина Windows на JavaScript. Также см. образец библиотеки анимаций HTML.
  • Размещение компонентов пользовательского интерфейса с помощью HTML и CSS, избегая встроенных макетов, таких как свойства offsetWidth и offsetHeight, для приложений Магазина Windows на JavaScript.
  • Использование переходов тем и анимаций XAML в приложениях Магазина Windows на C++, C# или Visual Basic. Дополнительные сведения см. в разделе о быстрых и динамичных анимациях в приложениях Магазина Windows и в примере анимации на XAML.

Обновляющееся содержимое

Методики разработки и кодирования для обеспечения производительности при отображении обновляющегося содержимого включают:

  • Определение целевых показателей актуальности содержимого. Например, стоит ли цель обновлять содержимое каждые несколько секунд. Или вполне достаточно обновлять содержимое каждые несколько минут, каждые несколько часов либо даже раз в день?
  • Кэширование содержимого при каждом удобном случае. См. также:
  • Когда кэшировать содержимое невозможно, отображайте реагирующий пользовательский интерфейс как можно быстрее — интерфейс должен позволять пользователям выполнять навигацию, но при этом показывать, что приложение все еще пытается загрузить некоторое содержимое.
  • Переход от кэшированного к динамическому содержимому должен выполняться способом, который не мешает работе пользователя. Например, приложение не должно изменять позицию содержимого при движении пальцем, когда загружается динамическое содержимое.
  • Предварительная загрузка содержимого. Подробнее:

Запуск приложения

Методики разработки и кодирования для обеспечения производительности при запуске приложений включают:

Возобновление работы приложения

Методики разработки и кодирования для обеспечения производительности при возобновлении работы приложений включают:

  • Плавный переход от кэшированного к динамическому содержимому должен выполняться способом, который не мешает работе пользователя. Например, приложение не должно изменять позицию содержимого при движении пальцем, когда загружается динамическое содержимое.
  • Избежание перезапуска приложения или повторной анимации содержимого.
  • Чем больше используемая память, тем медленнее возобновляется работа приложения. Управляйте памятью приложения следующими способами.
    • Сокращение рабочего набора своего кода.
    • Избежание утечек памяти за счет отмены регистрации обработчиков событий и снятия ссылок на визуальные элементы, где это только возможно.
    • Применение метода createObjectUrl и свойства oneTimeOnly для приложений Магазина Windows на JavaScript.
    • По возможности избегайте создания гибридных приложений, в которых используется и HTML/JavaScript, и XAML, чтобы свести к минимуму циклические ссылки.

Изменение размера и поворот приложений

Методики разработки и кодирования для обеспечения производительности при изменении размера и повороте приложений включают:

  • Применение класса VisualStateManager в приложениях Магазина Windows на C++, C# или Visual Basic.
  • Использование HTML/CSS вместо JavaScript везде, где это возможно, в приложениях Магазина Windows на JavaScript.
  • Немедленное завершение только необходимой работы. Операции, для которых требуется интенсивная работа приложения, можно отложить — у вашего приложения будет от 200 до 800 миллисекунд для завершения работы, прежде чем пользователь увидит пользовательский интерфейс приложения в состоянии обрезки.

Сдвиг содержимого

Методики разработки и кодирования для обеспечения производительности при просмотре содержимого с помощью сдвига включают:

  • Планирование из расчета сдвига пользователем 3–6 страниц в секунду.
  • Виртуализация больших наборов элементов. Подробнее: Использование виртуализации для списка или сетки.
  • Использование шаблонов проектов с наименьшим возможным числом элементов.
  • Визуализация содержимого в несколько этапов.

Обратите внимание, что по ходу работы могут выявиться другие, не соответствующие ни одному из описанных сценариев общие вопросы разработки, связанные с производительностью. Например, что произойдет при наличии устройства с прерывистым беспроводным подключением, медленным удаленным подключением или вообще без доступа к Интернету? В нашем примере кулинарного приложения одним из возможных подходов будет кэширование сопутствующих изображений после их первого скачивания. Другие методики см. в разделе о данных использования подключения.

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

Средства для обеспечения производительности

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

Среда выполнения Windows предоставляет API ведения журналов, подкрепляемые трассировкой событий Windows (ETW). Вместе они предлагают широкие возможности по ведению журналов и трассировке событий для приложений Магазина Windows. Эти API, входящие в пространство имен Windows.Foundation.Diagnostics, включают классы FileLoggingSession, LoggingActivity, LoggingChannel и LoggingSession.

Чтобы записать сообщение в определенную точку отчета, когда приложение работает, создайте объект LoggingChannel и затем вызовите метод LogMessage этого объекта, вот так.



// using Windows.Foundation.Diagnostics;
// ...

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");

myLoggingChannel.LogMessage(LoggingLevel.Information, "Here's my logged message.");

// ...


Чтобы записывать события запуска и остановки на протяжении периода времени, когда приложение работает, создайте объект LoggingActivity и затем вызовите конструктор LoggingActivity этого объекта, вот так.



// using Windows.Foundation.Diagnostics;
// ...

LoggingActivity myLoggingActivity;

// myLoggingChannel is defined and initialized in the previous code example.
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity"), myLoggingChannel))
{   // After this logging activity starts, a start event is logged.
    
    // Add code here to do something of interest.
    
}   // After this logging activity ends, an end event is logged.

// ...


Дополнительные примеры см. в разделах Образец LoggingSession и Образец FileLoggingSession.

После того как код приложения инструментирован, производительность приложения можно тестировать и измерять.

Тестирование и измерение соответствия целям по производительности

После того как приложение инструментировано, можно использовать следующие техники и средства для проверки того, насколько хорошо приложение выполняет исходные цели по производительности.

  • Тестирование на широком спектре конфигураций оборудования, которые могут использоваться пользователями, включая моноблоки, настольные компьютеры, ноутбуки, ультрабуки и планшеты.
  • Тестирование на широком спектре размеров экрана, которые могут использоваться пользователями. Обратите внимание: хотя на более крупных экранах можно показывать гораздо больше содержимого, вывод всего этого содержимого может негативно сказаться на производительности.
  • Устранение как можно большего количества посторонних факторов при тестировании. Например:
    • Отключите фоновые приложения на тестируемом устройстве. Чтобы сделать это, в Windows выберите чудо-кнопку Параметры > Изменение параметров компьютера > Компьютер и устройства. Выберите каждое из активных приложений в области Приложения на экране блокировки, затем выберите Не показывать краткие сведения о состоянии.
    • Создайте на тестируемом устройстве образы машинного кода для приложений Магазина Windows, разработанных для Windows на C# или Visual Basic. Чтобы сделать это, в Windows с рабочего стола откройте Центр поддержки. В области Обслуживание в разделе Автоматическое обслуживание выберите Начать обслуживание.
    • Запустите приложение несколько раз, чтобы устранить случайные факторы тестирования и обеспечить согласованные результаты.
  • Протестируйте снижение потребления заряда батарей. При создании приложения учитывайте, что компьютеры пользователей могут быть значительно менее мощными, чем ваша среда разработки. Windows 8 была разработана с учетом применения на маломощных устройствах, например планшетах. Также пользователи Windows RT смогут воспользоваться преимуществом малого энергопотребления устройств, основанных на архитектуре ARM. Приложения Магазина Windows должны выполнять свою часть работы так, чтобы обеспечить нормальную производительность на этих устройствах. Операции, которые мгновенно выполняются на вашем компьютере разработчика, могут значительно замедлять взаимодействие с пользователем на маломощных устройствах. Для правильной постановки задачи лучше сразу принять допущение, что маломощное устройство медленнее настольного компьютера примерно в 4 раза.
  • Использование сочетания наборов средств, таких как Microsoft Visual Studio и анализатор производительности Windows, для измерения производительности приложения. Приложение Visual Studio служит для предоставления анализа, уделяющего основное внимание приложению, такого как анализ привязок исходного кода. Анализатор производительности Windows служит для предоставления анализа, уделяющего основное внимание системе, включая предоставление информации о системе, сведений о событиях сенсорной манипуляции, операциях дискового ввода-вывода и нагрузке на графический процессор. Оба набора средств предоставляют запись и экспорт трассировок и могут заново открывать общедоступные трассировки и трассировки после окончания.
  • Перед отправкой своего приложения на сертификацию в Магазин Windows убедитесь, что в ваши планы тестирования включены связанные с производительностью тестовые случаи, как описано в тестах комплекта сертификации приложений для Windows и разделе "Производительность и надежность" тестовых случаев приложений Магазина Windows.

Проверка всех пунктов и улучшение структуры приложений на основе результатов тестирования производительности

После анализа результатов тестирования производительности определите, необходимы ли какие-то изменения, например:

  • Следует ли изменить какую-либо из имеющихся целей производительности приложения?
  • Следует ли изменить какое-либо из текущих решений по разработке приложения?
  • Следует ли добавить, удалить или изменить какой-либо из элементов инструментирования кода?

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

Связанные разделы

Планирование приложения
Производительность (приложения Магазина Windows)
Основные рекомендации по повышению производительности
Рекомендации по повышению производительности приложений Магазина Windows на JavaScript
Рекомендации по повышению производительности приложений Магазина Windows на C++, C# и Visual Basic

 

 

Показ:
© 2014 Microsoft