И снова настало это время. С новым выпуском Release Preview и новыми средствами разработчика Windows 8 стала на один шаг ближе к окончательной версии. Как и в случае с Consumer Preview, наша группа инженеров упорно трудилась над совершенствованием платформы разработки, чтобы обеспечить для вас наилучшие возможности для разработки приложений в среде Windows 8. В этой записи блога я опишу некоторые из них, а также помогу вам приступить к переносу существующих приложений для Consumer Preview в Release Preview.

Однако сначала коротко остановимся на процессе разработки для Windows

Перед переходом к новым возможностям Release Preview я хотел бы вкратце рассказать о том, как наша группа разработчиков относится к изменениям в Release Preview. На данной стадии процесса разработки большинство из этих возможностей Windows уже внедрены в платформу. В Release Preview мы поставили перед собой цель "отполировать" эти возможности, выполнить их доводку.

А что, собственно, это означает для вас как для разработчика? Это означает, что большинство изменений в Release Preview являются не очень значительными по сравнению с предыдущими выпусками Windows 8. Новые возможности ориентированы на удовлетворение некоторых конкретных потребностей. Многие из изменений просто улучшают работу существующих сценариев для Consumer Preview. Мы исправили ошибки платформы, увеличили ее производительность (была также реализована возможность, позволяющая разработчикам создавать более быстрые приложения, внося всего несколько изменений в код) и улучшили возможности, предназначенные для разработчиков. Достигнутыми при этом результатами мы остались довольны.

Думаю, что вы по достоинству оцените значение этого факта, поскольку все знания и навыки, полученные вами при создании приложений для Consumer Preview, будут полностью применимы и в Release Preview. Кроме того, количество изменений, которые необходимо внести в готовые приложения, минимально. В то же время можно сказать, что платформа для разработки отлажена до такой степени, как никогда прежде. Взгляните на список изменений и вы поймете, чем мы занимались.

Перемещаемые параметры приложений с высоким приоритетом

Данные приложения Windows 8 позволяют вам легко реализовать принцип "настроить один раз и использовать везде", определяющий использование параметров ваших приложений с помощью учета перемещаемых данных приложения. Приложив минимальные усилия, вы обеспечите для своих пользователей одинаковую настройку каждого конкретного приложения на всех их ПК с Windows 8. С выходом Release Preview эта возможность содержит перемещаемые настройки приложений, обладающие свойством HighPriority ("Высокий приоритет"). Перемещение с учетом высокого приоритета позволяет обеспечить единообразную работу приложения на разных компьютерах. Это достигается путем перемещения небольшого объема данных о состоянии, представленных в приложении. Данный процесс выполняется с высокой частотой.

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

Самое замечательное здесь состоит в том, что эту функцию можно легко реализовать. Просто создайте параметр или составной объект с именем "HighPriority" в корневом контейнере Roaming settings. Этот параметр перемещается через минуту после изменения, что позволяет перемещать основные данные состояния вашего приложения, чтобы пользователи могли быстро переходить к тому месту, на котором они остановились, при переходе с предыдущего компьютера на данный компьютер. Перемещение с высоким приоритетом работает только для одного параметра, поэтому если вам нужно перемещать несколько фрагментов данных, например статью и номер страницы, можно использовать составное значение. Размер составного объекта "HighPriority" не может превышать 8 КБ. Если размер больше этого значения, соответствующий составной объект будет перемещаться как обычный параметр.

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

Улучшенные шаблоны Visual Studio

Еще одна область, в которой мы осуществили множество улучшений, — это шаблоны в Visual Studio. Мы значительно обновили наши шаблоны и даже добавили новый, чтобы вы могли легко начать новый проект и в кратчайшие сроки получить работающее приложение.

Обновления шаблонов XAML

В выпуске Release Preview мы уделили шаблонам XAML самое пристальное внимания. Вот некоторые из наиболее важных изменений.

  • Мы удалили необязательные компоненты пустого шаблона приложения, такие как вспомогательные функции для привязки к данным, поддержки навигации, управления жизненным циклом процесса и т. д. Это позволяет добиться большей гибкости при создании приложения с нуля. При необходимости вы можете добавить эти компоненты по своему усмотрению.
  • Шаблоны XAML теперь поддерживают визуализацию по умолчанию. GridView и ListView теперь используют преимущества области заголовка, что позволяет виртуализировать связанные элементы. Кроме того, целевая страница GridApp теперь поддерживает только отображение подмножества элементов, а не всей коллекции, что улучшает производительность. Эти улучшения означают, что приложение будет прокручиваться быстрее без каких-либо дополнительных усилий с вашей стороны.
  • Мы добавили анимации входа на все страницы (кроме пустой страницы, так как она по-прежнему остается пустой). Эти анимации сглаживают переходы между страницами в шаблонах и делают приложения более динамичными.
  • Шаблон проекта D2D теперь поддерживает XAML.

Обновления всех шаблонов

Мы улучшили навигацию для всех шаблонов. В выпуске Consumer Preview навигация в шаблонах была в основном ориентирована на сенсорное управление. Теперь же шаблоны полностью поддерживают навигацию на основе клавиатуры и мыши с использованием кнопок "Назад" и "Вперед" и сочетаний клавиш. При применении шаблонов структура навигации приложения автоматически настраивается для поддержки всех форм ввода.

Новый шаблон для создания компонента среды выполнения Windows

Помимо обновления существующих шаблонов мы также хотели упростить для вас создание собственных компонентов среды выполнения Windows. Для этого мы добавили новый шаблон C#/VB, который делает всю тяжелую работу за вас. Он позволяет быстро создать компонент среды выполнения Windows, который затем можно использовать в основном приложении. Вам больше не нужно вручную создавать эти компоненты с нуля, так как шаблон выполняет всю работу по их настройке. Вам остается просто добавить настраиваемую логику.

Интерфейсы API для свойств файлов и предварительного выбора эскизов

После выхода Windows 8 Consumer Preview мы со всей серьезностью подошли к вопросам производительности. Мы хотели помочь вам создавать быстрые и динамичные приложения. Для приложений, использующих файловую систему для отображения представлений коллекции, таких как фотоальбомы, списки воспроизведения или наборы документов, одним из узких мест производительности являлся доступ к файлам. Над этой проблемой мы и хотели поработать.

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

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

Windows.Storage.Search.QueryOptions.SetPropertyPrefetch

  • Эта функция позволяет указать список свойств, которые Windows оптимизирует для быстрого получения.
  • Доступ к этим свойствам затем можно получить с помощью тех же асинхронных методов, что и раньше — только теперь они выполняются быстрее.

Windows.Storage.Search.QueryOptions.SetThumbnailPrefetch

  • Эта функция сообщает Windows, что вашему приложению требуются эскизы для файлов в наборе результатов запроса.
  • Доступ к этим эскизам можно получить с помощью тех же асинхронных методов, что и раньше — только теперь они выполняются быстрее.

Вот как это выглядит в JavaScript:

var search = Windows.Storage.Search;
var fileProperties = Windows.Storage.FileProperties;

// Create query options with common query sort order and file type filter.
var fileTypeFilter = [".jpg", ".png", ".bmp", ".gif"];
var queryOptions = new search.QueryOptions(search.CommonFileQuery.orderByName, fileTypeFilter);

// Set up property prefetch - use the PropertyPrefetchOptions for top-level properties
// and an array for additional properties.
var imageProperties = fileProperties.PropertyPrefetchOptions.imageProperties;
var copyrightProperty = "System.Copyright";
var colorSpaceProperty = "System.Image.ColorSpace";
var additionalProperties = [copyrightProperty, colorSpaceProperty];
queryOptions.setPropertyPrefetch(imageProperties, additionalProperties);

// Set up thumbnail prefetch.
var thumbnailMode = fileProperties.ThumbnailMode.picturesView;
var requestedSize = 190;
var thumbnailOptions = fileProperties.ThumbnailOptions.useCurrentScale;
queryOptions.setThumbnailPrefetch(thumbnailMode, requestedSize, thumbnailOptions);

// Query the Pictures library
var query = Windows.Storage.KnownFolders.picturesLibrary.createFileQueryWithOptions(queryOptions);
query.getFilesAsync().done(function (files) {
// Output the query results
files.forEach(function (file) {
// getImagePropertiesAsync returns synchronously when prefetching
// retrieved the properties in advance.
file.properties.getImagePropertiesAsync().done(function (properties) {
// Use image properties
});

// Similarly, extra properties are retrieved asynchronously but may
// return immediately when prefetching completed.
file.properties.retrievePropertiesAsync(additionalProperties).done(function (properties) {
// Use additional properties
});

// You can also retrieve and use thumbnails
file.getThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions).done(function (thumbnail) {
// Use the thumbnail
});
});
});

Аналогичный код на C# будет выглядеть следующим образом:

const string CopyrightProperty = "System.Copyright";
const string ColorSpaceProperty = "System.Image.ColorSpace";

// Set up file type filter.
List<string> fileTypeFilter = new List<string>();
fileTypeFilter.Add(".jpg");
fileTypeFilter.Add(".png");
fileTypeFilter.Add(".bmp");
fileTypeFilter.Add(".gif");

// Create query options.
var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, fileTypeFilter);

// Set up property prefetch - use the PropertyPrefetchOptions for top-level properties
// and a list for additional properties.
List<string> propertyNames = new List<string>();
propertyNames.Add(CopyrightProperty);
propertyNames.Add(ColorSpaceProperty);
queryOptions.SetPropertyPrefetch(PropertyPrefetchOptions.ImageProperties, propertyNames);

// Set up thumbnail prefetch.
const uint requestedSize = 190;
const ThumbnailMode thumbnailMode = ThumbnailMode.PicturesView;
const ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale;
queryOptions.SetThumbnailPrefetch(thumbnailMode, requestedSize, thumbnailOptions);

// Set up the query and retrieve files.
var query = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions);
IReadOnlyList<StorageFile> fileList = await query.GetFilesAsync();
foreach (StorageFile file in fileList)
{
// GetImagePropertiesAsync returns synchronously after prefetching
// retrieves the properties in advance.
var properties = await file.Properties.GetImagePropertiesAsync();
// Use image properties

// similarly, extra properties are retrieved asynchronously but may
// return immediately when prefetching completes.
IDictionary<string, object> extraProperties = await file.Properties.RetrievePropertiesAsync(propertyNames);
// Use additional properties

// You can also retrieve and use thumbnails.
var thumbnail = await fle.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions);
// Use thumbnail
}

При тестировании приложений, использующих эти новые возможности, мы наблюдали существенные улучшения: время отображения фотографий из библиотеки фотографий пользователя с помощью StorageDataSourceAdapter уменьшилось на 70%, а улучшение работы приложения, которое заполняет базу данных свойствами файлов, извлеченными из файловой системы, составило 400 %.

Поэтому если вы создаете приложение, которому требуется доступ к большому числу файлов, изучите новые возможности и используйте их для ускорения работы вашего приложения. Дополнительные сведения см. в документации по API Windows.Storage.Search.QueryOptions в Центре разработки.

Blend и конструкторы Visual Studio

Начиная с выпуска Consumer Preview, мы продолжаем улучшать наши средства разработки. Мы знаем, что пользовательский интерфейс — это один из основных способов, позволяющий выделить ваше приложение из общей массы. Поэтому мы хотели максимально упростить интеграцию всех новых концепций разработки в стиле Metro в вашем приложении.

Улучшенная разработка состояний просмотра для приложений XAML

Состояния просмотра — одна из важнейших концепций пользовательского интерфейса для приложений в стиле Metro. В выпуске Release Preview конструктор VS XAML и Blend были обновлены. Теперь вы можете просматривать и создавать страницы с помощью визуальных состояний для настройки состояний просмотра приложений (FullScreenLandscape, FullScreenPortrait, Filled и Snapped) с помощью панели устройств (которую ранее называли панелью платформы). Теперь панель устройств автоматически меняет состояния просмотра при изменении представления. Включение режима записи позволяет изменениям, внесенным на поверхности разработки или в инспекторе свойств, менять текущее выбранное состояние просмотра (а не изменять во всех случаях базовое состояние).

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

Кроме того, теперь вы можете разрабатывать и просматривать состояния просмотра с анимациями тем из библиотеки анимации с помощью компонента Visual State Blend. Библиотека анимации — это набор анимаций в стиле Metro, специально созданных для использования преимуществ платформы в сфере поддержки анимации. Эти анимации используются повсюду в пользовательском интерфейсе Windows и доступны также для ваших приложений в стиле Metro.

Улучшенная производительность в Blend для разработки HTML-страниц

В выпуске Consumer Preview мы реализовали много удобных функций в средстве Blend для разработки HTML-страниц. В выпуске Release Preview основное внимание мы уделяли упрощению и повышению эффективности использования этой функции в Blend. Мы внесли несколько улучшений в общий процесс разработки HTML и CSS в Blend, которые облегчают создание приложений в Release Preview, например:

  • теперь Blend поддерживает вырезание, копирование и вставку свойств и правил стилей CSS, а также элементы на монтажной панели и Live DOM;
  • вы можете изменять свойства CSS и атрибуты HTML нескольких элементов одновременно;
  • вы можете выбрать команды [Create a style rule from element class/id] (Создать правило стиля на основе класса или идентификатора элемента) и [Add/Remove class] (Добавить или удалить класс) в контекстном меню в любом элементе;
  • все области, поддерживающие поиск, лучше показывают, что при поиске применялся фильтр.

HTML_blend_designerКонструктор HTML в Blend с новой возможностью для вырезания, копирования и вставки

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

  • Blend поддерживает динамические значения для свойств элементов управления.
  • Blend отображает подробные сведения об ошибках в панели результатов, если элемент управления WinJS вызывает исключение.
  • Мы улучшили пользовательский интерфейс для переключения между представлениями SemanticZoom и активацией всплывающих элементов и меню.
  • Мы добавили новые редакторы значений для свойства значка AppBarCommand, всплывающих элементов AppBarCommand и MenuCommand.

Поэтому независимо от того, работаете ли вы с HTML и CSS или XAML, вы найдете много улучшений средств разработки приложений в стиле Metro. Конечно, описанные здесь новые возможности — это лишь небольшая часть проделанной нами работы. Ознакомьтесь с новыми средствами сами, чтобы увидеть все реализованные нами улучшения.

Модель событий жестов JavaScript

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

  • Новая модель поддерживает несколько одновременных жестов. Эта новая возможность означает, что теперь вы можете создавать функции управления несколькими жестами (например, ползунок, контролируемый многими жестами).
  • Теперь вы явно управляете тем, какие элементы контролируются жестами и какие активные сенсорные элементы соответствуют каждому жесту. В модели событий Consumer Preview были очень простые ограничивающие правила для определения целевых и соответствующих друг другу контактов. В новой модели вы решаете, с какими контактами нужно сгруппировать данный контакт и какой элемент будет инициировать конечные события жестов. Вы можете добавить контакт в несколько распознавателей жестов одновременно. Вы можете создать несколько распознавателей жестов для одного и того же элемента. В обоих случаях прослушиватели событий могут программно выбирать жесты для обработки.
  • Таким образом вы сможете обрабатывать сенсорные события и жесты независимо друг от друга (до этого они относились к одному и тому же элементу). Это значительно упрощает реализацию более сложных сценариев ввода данных, позволяя, например, пользователям выполнять мультисенсорные жесты для изменения масштаба контейнера, в то же время выделяя отдельные элементы в контейнере, которого касаются пальцы.
  • Событие возвращает данные преобразования в такой форме, которая позволяет вам легко использовать их для обработки контента в ответ на жесты. В прошлом вам требовалось выполнить множество математических матричных операций для извлечения нужных данных. Новая модель возвращает приращения преобразования в пространстве координат родительского объекта. Это именно та информация, которая необходима для объединения с текущим преобразованием CSS, которое размещает элемент в контейнере для обновления положения, размера и ориентации элемента.

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

Обновления Центра разработки

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

Во-первых, мы просто добавили дополнительный контент в Центр разработки. В разделе Центра разработки, посвященном выпуску Consumer Preview, представлены основные сведения, необходимые для того, чтобы приступить к работе. После выхода Release Preview вы можете легко найти инструкции по дополнительным функциям, которые позволяют выделить замечательные возможности приложений в стиле Metro, отсутствующие в других приложениях. Вот некоторые из основных новинок:

  • мы добавили много новых примеров, в том числе образцы элемента управления XAML WebView, IndexedDB, пула потоков, рабочих веб-процессов JS и многое другое;
  • доступно больше 200 новых концептуальных разделов, кратких и практических руководств для создания приложений в стиле Metro;
  • справочная документация по API теперь обширна, как никогда прежде.

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

Поэтому первым делом после установки Release Preview перейдите в Центр разработки и сами взгляните на новый контент. Вы найдете эти и другие улучшения, облегчающие создание приложений в стиле Metro.

Изменение существующих приложений для работы в Release Preview

При разработке выпуска Release Preview мы пытались свести число изменений в приложениях к минимуму. Мы знаем, что многие из вас упорно трудились над приложениями, и хотели минимизировать объем усилий, необходимых для перехода на Release Preview. Конечно, для перевода новой платформы разработки на более высокий качественный уровень всегда требуется изменить некоторые из ее компонентов.

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

После этого запустите приложение и отследите все ошибки, вызванные изменениями API. Чтобы помочь вам, мы создали руководство по миграции, в котором описаны основные изменения API, внесенные в Release Preview по сравнению с Consumer Preview.

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

Заключение

Надеюсь, что вы так же, как и мы, рады приступить к созданию приложений в выпуске Release Preview. Изменения, описанные в этой записи блога, — это лишь малая толика проделанной нами работы. Совместное влияние всех этих изменений заключается в том, что Windows 8 позволяет вам создавать более мощные приложения так просто, как никогда. С помощью руководства по миграции вы можете использовать преимущества этих изменений как в новых, так и в имеющихся приложениях.

Итак, смело продвигайтесь вперед, загрузите Release Preview и средства разработки и приступайте к созданию приложений. Вы также можете изучить материалы блога Магазина Windows для разработчиков. Не забывайте, что если у вас есть вопрос, вы можете найти многие ответы на форумах Центра разработки и в нашем блоге. Удачи в разработке приложений!

-- Джейк Сабулски (Jake Sabulsky) 
   Руководитель программы, Windows

Особая благодарность Дейву Беннетту (Dave Bennett), Марку Вотье (Marc Wautier), Полу Чапмену (Paul Chapman), Хизер Браун (Heather Brown), Кейту Бойд (Keith Boyd) и Стиву Райт (Steve Wright) за помощь в создании этой записи блога.