Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os usuários esperam que seus aplicativos permaneçam responsivos, se sintam naturais e não escorram a bateria. Tecnicamente, o desempenho é um requisito não funcional, mas tratar o desempenho como um recurso ajudará você a atender às expectativas dos usuários. Especificar metas e medir são fatores-chave. Determine quais são seus cenários críticos de desempenho; definir o que um bom desempenho significa. Em seguida, meça cedo e com frequência suficiente durante todo o ciclo de vida do seu projeto para ter certeza de que atingirá suas metas.
Especificando metas
A experiência do usuário é uma maneira básica de definir um bom desempenho. O tempo de inicialização de um aplicativo pode influenciar a percepção de desempenho de um usuário. Um usuário pode considerar que o tempo de inicialização de um aplicativo de menos de um segundo é excelente, menos de 5 segundos para ser bom e maior que 5 segundos para ser ruim.
Outras métricas têm um impacto menos óbvio na experiência do usuário, por exemplo, memória. As chances de um aplicativo ser encerrado enquanto suspenso ou inativo aumentam com a quantidade de memória usada pelo aplicativo ativo. É uma regra geral que o alto uso de memória degrada a experiência de todos os aplicativos no sistema, portanto, ter uma meta sobre o consumo de memória é razoável. Leve em consideração o tamanho aproximado do seu aplicativo, conforme percebido pelos usuários: pequeno, médio ou grande. As expectativas em torno do desempenho serão correlacionadas a essa percepção. Por exemplo, talvez você queira um aplicativo pequeno que não use muita mídia para consumir menos de 100 MB de memória.
É melhor definir uma meta inicial e revisá-la mais tarde do que não ter uma meta. As metas de desempenho do aplicativo devem ser específicas e mensuráveis e devem se enquadrar em três categorias: quanto tempo os usuários demoram ou o aplicativo para concluir tarefas (tempo); a taxa e a continuidade com que o aplicativo é redesenhado em resposta à interação do usuário (fluidez); e quão bem o aplicativo conserva os recursos do sistema, incluindo a energia da bateria (eficiência).
Hora
Pense nos intervalos aceitáveis de tempo decorrido (classes de interação) necessários para que os usuários concluam suas tarefas em seu aplicativo. Para cada classe de interação, atribua um rótulo, um sentimento do usuário percebido e durações ideais e máximas. A seguir estão algumas sugestões.
| Rótulo de classe de interação | Percepção do usuário | Ideal | Máximo | Exemplos |
|---|---|---|---|---|
| Rápido | Atraso minimamente perceptível | 100 milissegundos | 200 milissegundos | Abra a barra de aplicativos; pressione um botão (primeira resposta) |
| Típico | Rápido, mas não rápido | 300 milissegundos | 500 milissegundos | Redimensionar; zoom semântico |
| Responsivo | Não rápido, mas parece responsivo | 500 milissegundos | 1 segundo | Navegue para uma página diferente; retome o aplicativo de um estado suspenso |
| Lançamento | Experiência competitiva | 1 segundo | 3 Segundos | Inicie o aplicativo pela primeira vez ou depois que ele tiver sido encerrado anteriormente |
| Contínuo | Não parece mais responsivo | 500 milissegundos | 5 segundos | Baixar um arquivo da Internet |
| Prisioneiro | Demorado; usuário poderia se afastar. | 500 milissegundos | 10 segundos | Instale vários aplicativos da Loja |
Agora você pode atribuir classes de interação aos cenários de desempenho do aplicativo. Você pode atribuir a referência pontual do aplicativo, uma parte da experiência do usuário e uma classe de interação a cada cenário. Aqui estão algumas sugestões para um aplicativo de comida e jantar de exemplo.
| Cenário | Momento específico | Experiência do usuário | Classe de interação |
|---|---|---|---|
| Navegar até a página de receitas | Primeira resposta | Animação de transição de página iniciada | Rápido (100 a 200 milissegundos) |
| Responsivo | Lista de ingredientes carregada; sem imagens | Responsivo (500 milissegundos - 1 segundo) | |
| Completamente visível | Todo o conteúdo carregado; imagens mostradas | Contínuo (500 milissegundos - 5 segundos) | |
| Pesquisar receita | Primeira resposta | O botão de pesquisa foi clicado | Rápido (100 a 200 milissegundos) |
| Completamente visível | Lista de títulos de receitas locais mostrados | Típico (300 a 500 milissegundos) |
Se você estiver exibindo conteúdo ao vivo, considere também as metas de atualização de conteúdo. A meta é atualizar o conteúdo a cada poucos segundos? Ou atualizar conteúdo a cada poucos minutos, a cada poucas horas ou até mesmo uma vez por dia é uma experiência aceitável do usuário?
Com suas metas especificadas, agora você é mais capaz de testar, analisar e otimizar seu aplicativo.
Fluidez
Metas de fluidez mensuráveis específicas para seu aplicativo podem incluir:
- Sem interrupções ou travamentos na atualização da tela.
- Animações renderizam a 60 quadros por segundo (FPS).
- Quando um usuário desloca/rola, o aplicativo apresenta de 3 a 6 páginas de conteúdo por segundo.
Eficiência
Metas de eficiência mensuráveis específicas para seu aplicativo podem incluir:
- Para o processo do aplicativo, a porcentagem de CPU está em ou abaixo de N e o uso de memória em MB está em ou abaixo de M o tempo todo.
- Quando o aplicativo está inativo, N e M são zero para o processo do aplicativo.
- O seu aplicativo pode ser usado ativamente por X horas na alimentação da bateria; quando o seu aplicativo está inativo, o dispositivo mantém sua carga por Y horas.
Projetar seu aplicativo para desempenho
Agora você pode usar suas metas de desempenho para influenciar o design do aplicativo. Usando o aplicativo de comida e jantar de exemplo, depois que o usuário navega até a página de receitas, você pode optar por atualizar itens incrementalmente para que o nome da receita seja renderizado primeiro, a exibição dos ingredientes seja adiada e a exibição de imagens seja adiada ainda mais. Isso mantém a capacidade de resposta e uma interface do usuário fluida durante o movimento panorâmico/rolagem, com a renderização de fidelidade total ocorrendo depois que a interação diminui para um ritmo que permite que o thread da interface do usuário se atualize. Aqui estão alguns outros aspectos a serem considerados.
de interface do usuário
- Maximize a análise e o tempo de carga e a eficiência de memória para cada página da interface do usuário do aplicativo (especialmente a página inicial) otimizando a marcação XAML. Em poucas palavras, adie o carregamento da interface do usuário e do código até que seja necessário.
- Para ListView e GridView, torne todos os itens do mesmo tamanho e use quantas técnicas de otimização ListView e GridView possível.
- Declare a interface do usuário em forma de marcação, que o framework pode carregar e reutilizar em partes, em vez de construí-la imperativamente no código.
- Atrase a criação de elementos de interface do usuário até que o usuário precise deles. Consulte o atributo x:Load .
- Prefira transições e animações de tema em vez de animações baseadas em storyboard. Para obter mais informações, consulte Visão geral das animações. Lembre-se de que as animações com storyboard exigem atualizações constantes na exibição e mantêm o pipeline da CPU e de gráficos ativo. Para preservar a bateria, não tenha animações em execução se o usuário não estiver interagindo com o aplicativo.
- As imagens carregadas devem ser carregadas em um tamanho apropriado para a exibição na qual você a está apresentando, usando o método GetThumbnailAsync .
CPU, memória e energia
- Agende tarefas de menor prioridade para serem executadas em threads de menor prioridade e/ou em núcleos de processador. Consulte programação assíncrona, a propriedade Dispatcher e a classe CoreDispatcher.
- Minimize a pegada de memória do seu aplicativo liberando recursos caros (como mídia) quando suspenso.
- Minimize o conjunto em execução do código.
- Evite vazamentos de memória cancelando o registro de manipuladores de eventos e desreferenciando elementos da interface do usuário sempre que possível.
- Por causa da bateria, seja conservador com a frequência com que você pesquisa dados, consulta um sensor ou agenda o trabalho na CPU quando ele está ocioso.
Acesso a dados
- Se possível, pré-carregar o conteúdo. Para pré-busca automática, consulte a classe ContentPrefetcher. Para a pré-busca manual, consulte o namespace Windows.ApplicationModel.Background e a classe MaintenanceTrigger.
- Se possível, armazene em cache o conteúdo que é caro de acessar. Consulte as propriedades de LocalFolder e de LocalSettings.
- Para falhas de cache, mostre rapidamente uma interface de usuário temporária que indique que o aplicativo ainda está carregando conteúdo. Faça a transição do espaço reservado para o conteúdo dinâmico de uma maneira que não seja chocante para o usuário. Por exemplo, não altere a posição do conteúdo sob o dedo do usuário ou o ponteiro do mouse, pois o aplicativo carrega conteúdo dinâmico.
lançamento e retomada do aplicativo
- Adie a tela inicial do aplicativo e não estenda a tela inicial do aplicativo, a menos que seja necessário. Para obter detalhes, consulte Criar uma experiência de inicialização rápida e fluida de aplicativos e Exibir uma tela inicial por mais tempo.
- Desabilite as animações que ocorrem imediatamente após a tela de abertura ser fechada, pois elas só levarão a uma percepção de atraso no início do aplicativo.
interface do usuário adaptativa e orientação
- Use a classe VisualStateManager.
- Conclua apenas o trabalho exigido imediatamente, adiando o trabalho intensivo do aplicativo até mais tarde — seu aplicativo tem entre 200 e 800 milissegundos para concluir essa tarefa antes que o usuário veja a interface do aplicativo em um estado reduzido.
Com seus designs relacionados ao desempenho em vigor, você pode começar a codificar seu aplicativo.
Instrumento para desempenho
Conforme você codifica, adicione um código que registra mensagens e eventos em determinados pontos enquanto seu aplicativo é executado. Posteriormente, ao testar seu aplicativo, você pode usar ferramentas de criação de perfil, como o Windows Performance Recorder e o Windows Performance Analyzer (ambos estão incluídos no Windows Performance Toolkit) para criar e exibir um relatório sobre o desempenho do aplicativo. Neste relatório, você pode procurar essas mensagens e eventos para ajudá-lo a analisar mais facilmente os resultados do relatório.
A Plataforma Universal do Windows (UWP) fornece APIs de registro em log, apoiadas peloETW (Rastreamento de Eventos do
Para registrar uma mensagem no relatório em um ponto específico enquanto o aplicativo está em execução, crie um objeto LoggingChannel e, em seguida, chame o método LogMessage do objeto, assim.
// using Windows.Foundation.Diagnostics;
// ...
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage(LoggingLevel.Information, "Here' s my logged message.");
// ...
Para registrar eventos de início e término no relatório durante um período de tempo enquanto o aplicativo está em execução, crie um objeto LoggingActivity e, em seguida, chame o construtor LoggingActivity do objeto, assim.
// 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.
// ...
Consulte também o exemplo de registro em log .
Com seu aplicativo instrumentado, você pode testar e medir o desempenho do aplicativo.
Testar e medir em relação às metas de desempenho
Parte do plano de desempenho é definir os pontos durante o desenvolvimento em que você medirá o desempenho. Isso serve a diferentes finalidades, dependendo se você está medindo durante a prototipagem, o desenvolvimento ou a implantação. Medir o desempenho durante os estágios iniciais da criação de protótipos pode ser tremendamente valioso, portanto, recomendamos que você faça isso assim que tiver um código que faça um trabalho significativo. As medidas iniciais fornecem uma boa ideia de onde estão os custos importantes em seu aplicativo e informam as decisões de design. Isso resulta em aplicativos de alto desempenho e escaláveis. Geralmente, é mais caro alterar designs mais tarde do que antes. Medir o desempenho no final do ciclo do produto pode resultar em hacks de última hora e desempenho ruim.
Use essas técnicas e ferramentas para testar como seu aplicativo se compara com suas metas de desempenho originais.
- Teste em uma ampla variedade de configurações de hardware, incluindo computadores all-in-one e desktop, laptops, ultrabooks e tablets e outros dispositivos móveis.
- Teste em uma ampla variedade de tamanhos de tela. Embora tamanhos de tela mais amplos possam mostrar muito mais conteúdo, trazer todo esse conteúdo extra pode afetar negativamente o desempenho.
- Elimine o máximo de variáveis de teste que puder.
- Desative aplicativos em segundo plano no dispositivo de teste. Para fazer isso, no Windows, selecione Configurações do menu >Personalização>. Selecione cada aplicativo ativo e selecione Nenhum.
- Compile seu aplicativo para código nativo no modo de liberação antes de implantá-lo no dispositivo de teste.
- Para garantir que a manutenção automática não afete o desempenho do dispositivo de teste, dispare-o manualmente e aguarde até que ele seja concluído. No Windows, no menu Iniciar, pesquise por Segurança e Manutenção. Na área de Manutenção
, em de Manutenção Automática, selecione Iniciar de manutenção e aguarde a alteração do status da Manutençãoem andamento . - Execute o aplicativo várias vezes para ajudar a eliminar variáveis de teste aleatórias e ajudar a garantir medidas consistentes.
- Teste a redução na disponibilidade de energia. O dispositivo dos usuários pode ter significativamente menos energia do que o computador de desenvolvimento. O Windows foi projetado com dispositivos de baixa potência, como dispositivos móveis, em mente. Os aplicativos executados na plataforma devem garantir que eles têm um bom desempenho nesses dispositivos. Como uma heurística, espere que um dispositivo de baixa potência seja executado a cerca de um quarto da velocidade de um computador desktop e defina suas metas adequadamente.
- Use uma combinação de ferramentas como o Microsoft Visual Studio e o Windows Performance Analyzer para medir o desempenho do aplicativo. O Visual Studio foi projetado para fornecer uma análise focada no aplicativo, como vinculação de código-fonte. O Analisador de Desempenho do Windows foi projetado para fornecer análises focadas no sistema, como fornecer informações do sistema, informações sobre eventos de manipulação de toque e informações sobre entrada/saída de disco (E/S) e custo de GPU (unidade de processamento gráfico). Ambas as ferramentas fornecem captura e exportação de rastreamentos e podem reabrir rastreamentos compartilhados e pós-mortem.
- Antes de enviar seu aplicativo à Loja para certificação, não se esqueça de incorporar em seus planos de teste os casos de teste relacionados ao desempenho, conforme descrito na seção "Testes de desempenho" de testes do Kit de Certificação de Aplicativos do Windows e na seção "Desempenho e estabilidade" de casos de teste de aplicativo UWP.
Para obter mais informações, consulte esses recursos e ferramentas de criação de perfil.
- Analisador de Desempenho do Windows
- Kit de ferramentas de desempenho do Windows
- Analisar o desempenho usando as ferramentas de diagnóstico do Visual Studio
- O desempenho XAML da sessão //build/
- A sessão //build/ Novas Ferramentas XAML no Visual Studio 2015
Responder aos resultados do teste de desempenho
Depois de analisar os resultados do teste de desempenho, determine se alguma alteração é necessária, por exemplo:
- Você deve alterar qualquer uma das decisões de design do aplicativo ou otimizar seu código?
- Você deve adicionar, remover ou alterar qualquer uma das instrumentações no código?
- Você deve revisar alguma de suas metas de desempenho?
Se forem necessárias alterações, faça-as e volte a instrumentar ou testar e repetir.
Otimizando
Otimize apenas os caminhos de código críticos ao desempenho em seu aplicativo: aqueles em que a maioria do tempo é gasto. A perfilagem vai dizer qual. Muitas vezes, há uma compensação entre a criação de software que segue boas práticas de design e a escrita de código que executa na otimização mais alta. Geralmente, é melhor priorizar a produtividade do desenvolvedor e um bom design de software em áreas em que o desempenho não é uma preocupação.