Dicas de otimização para    aplicações Qt e QML.1   Copyright 2012 Nokia
Introdução    • Willer Moreira         Bacharel em Ciência da Computação - UFAM                  Desenvolvedor de Softwa...
TÓPICOS    • Porque performance é importante    • Como melhorar a performance das suas aplicacões    • Perguntas3   Copyri...
Porque performance éimportante    • É atrativo para o usuário    • Deixa sua aplicação com um aspecto mais profissional   ...
Porque performance éimportante    • Qt Everywhere         Desktop                  Plataformas embarcadas com recursos l...
Como melhorar a performance    • TOC - Theory of Constraints (ou Teoria das Restrições)    • Esta teoria é baseada na idéi...
Teoria das restrições    • Defina uma meta?:         Por exemplo: Esta aplicação deve rodar em 30 FPS    • E então:      ...
Identificando o gargalo    • A melhor forma de identificar o gargalo:        Ferramentas de profiling                    ...
Identificando o gargalo    • Quando o gargalo é identificado:        Verifique se a implementação usada é a melhor a     ...
Explorar o gargalo     • Dicas gerais:         Cache                   Atrasar um processamento até que ele seja        ...
QVector vs QLinkedList vsQList     • QVector         Itens são armazenados continuamente na memória                   So...
QVector vs QLinkedList vsQList     • QLinkedList         Usada para grande quantitade de elementos                   Tem...
QVector vs QLinkedList vsQList     • QList         De longe é o container mais usado                   Gera menos código...
QVector vs QLinkedList vsQList     • QList é mais fácil de usar e gera menos código     • Na maioria dos caso, QList é a i...
Qt implicit data sharing     • Maximiza o reuso de objetos e minimiza a cópia15   Copyright 2012 Nokia
Qt implicit data sharing     • Objeto somente é copiado se for modificado16   Copyright 2012 Nokia
Qt implicit data sharing     • Como evitar deep-copy:         Use somente operadores e funções const se          possível...
Qt implicit data sharing     • Exemplos:                            QTransform não usa implicit data sharing18   Copyright...
Qt implicit data sharing     • Acessem o documento “Implicitly Shared Classes” para         ver a lista completa de classe...
Dicas de Otimização para QML20   Copyright 2012 Nokia
Dividir e conquistar21   Copyright 2012 Nokia
Dividir e conquistar     • Dividir a interface da aplicação em múltiplos arquivos         QML     • Cada entidade lógica s...
Dividir e conquistar     • Usar o arquivo main.qml como a interface principal         Com diferentes states e transitions...
Load e Unload24   Copyright 2012 Nokia
Load e Unload     • Usar o Loader para controlar o consumo de memória     • Carregar somente o mínimo possível no inicio  ...
Load e Unload26   Copyright 2012 Nokia
Otimizar o uso de Imagens27   Copyright 2012 Nokia
Otimizar o uso de Imagens     • Diminuir o consumo de memória     • Especificar o tamanho exato da imagem     • Evitar faz...
Operações com Strings29   Copyright 2012 Nokia
Operações com Strings     • Uso exagerado do operador + resulta em múltiplas         alcocações de memória     • Usar Stri...
Dominar States, Transitions e         Animations31   Copyright 2012 Nokia
States, Transitions eAnimations     • Em um Transition, a área animada deve ser pequena     • Animar diferentes itens sequ...
Seguir sempre as boas           práticas de programação33   Copyright 2012 Nokia
Boas práticas     • Para melhor performance use C++ e não JavaScript     • Inserir propriedades sempre no topo das declara...
Links úteis     • QML Performance Monitor         http://www.youtube.com/watch?v=XdI9C53uJw8     • Valgrind          htt...
Canais decomunicação•    @nokiadev_brasil•    http://bit.ly/NokiaDev_Qt_Brasil•    http://blog.qtlabs.org.br/•    willer.m...
Perguntas?Copyright 2012 Nokia
Obrigado!Copyright 2012 Nokia
Próximos SlideShares
Carregando em…5
×

Dicas de otimização para aplicações Qt

1.126 visualizações

Publicada em

Em um certo momento no desenvolvimento de uma aplicação especialmente para dispositivos móveis é percebida a necessidade de melhorar o desempenho. Neste webinar, serão apresentadas algumas dicas e boas práticas que podem ser utilizadas para melhorar a performance e o consumo de energia das aplicações feitas em Qt.

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.126
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
10
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Dicas de otimização para aplicações Qt

  1. 1. Dicas de otimização para aplicações Qt e QML.1 Copyright 2012 Nokia
  2. 2. Introdução • Willer Moreira  Bacharel em Ciência da Computação - UFAM  Desenvolvedor de Software no INdT desde 2006  Projeto PySide  Desenvolve aplicações Qt/QML2 Copyright 2012 Nokia
  3. 3. TÓPICOS • Porque performance é importante • Como melhorar a performance das suas aplicacões • Perguntas3 Copyright 2012 Nokia
  4. 4. Porque performance éimportante • É atrativo para o usuário • Deixa sua aplicação com um aspecto mais profissional • O processo de desenvolvimento da sua aplicação fica mais eficiente • Interfaces dinâmicas4 Copyright 2012 Nokia
  5. 5. Porque performance éimportante • Qt Everywhere  Desktop  Plataformas embarcadas com recursos limitados • Nem todas as aplicações podem tirar vantagem do uso de múltiplos cores5 Copyright 2012 Nokia
  6. 6. Como melhorar a performance • TOC - Theory of Constraints (ou Teoria das Restrições) • Esta teoria é baseada na idéia de que em qualquer sistema complexo, existe pelo menos uma restrição que limita sua habilidade de alcançar o seu objetivo ou funcionamento pleno. Para alcançar as melhorias nesse sistema essa restrição deve ser identificada e resolvida.6 Copyright 2012 Nokia
  7. 7. Teoria das restrições • Defina uma meta?:  Por exemplo: Esta aplicação deve rodar em 30 FPS • E então:  (1) Identifique o gargalo (restrição)  (2) Decida como explorar esse gargalo  (3) Faça as melhorias necessárias  (4) Se a meta não foi alcançada, volte para (1)  Pronto!7 Copyright 2012 Nokia
  8. 8. Identificando o gargalo • A melhor forma de identificar o gargalo:  Ferramentas de profiling − Shark (Mac OS X) − Valgrind (X11) − Visual Studio Profiler (Windows) − QML Performance Monitor • Obs: Sempre faça as medições no modo release.8 Copyright 2012 Nokia
  9. 9. Identificando o gargalo • Quando o gargalo é identificado:  Verifique se a implementação usada é a melhor a ser usada para essa tarefa • Uma vez que a melhor implementação foi escolhida, você pode explorar esse gargalo  Design  Código fonte  Compilação9 Copyright 2012 Nokia
  10. 10. Explorar o gargalo • Dicas gerais:  Cache  Atrasar um processamento até que ele seja realmente necessário  Otimizações de compilação • Técnicas de Otimização para o Qt  Escolher sempre o Container correto − QVector vs QLinkedList vs QList  Usar “implicit data sharing” de forma eficiente10 Copyright 2012 Nokia
  11. 11. QVector vs QLinkedList vsQList • QVector  Itens são armazenados continuamente na memória  Somente um bloco de memória é alocado  Inserções no inicio e no meio são lentas11 Copyright 2012 Nokia
  12. 12. QVector vs QLinkedList vsQList • QLinkedList  Usada para grande quantitade de elementos  Tempo constante para inserções e remoções12 Copyright 2012 Nokia
  13. 13. QVector vs QLinkedList vsQList • QList  De longe é o container mais usado  Gera menos código para o executável  Aloca espaço no inicio e no fim da estrutura13 Copyright 2012 Nokia
  14. 14. QVector vs QLinkedList vsQList • QList é mais fácil de usar e gera menos código • Na maioria dos caso, QList é a ideal para se usar. • Se você só faz append(), use QVector • Se você deseja tempos constantes de inserção e remoção no meio do array, use QLinkedList14 Copyright 2012 Nokia
  15. 15. Qt implicit data sharing • Maximiza o reuso de objetos e minimiza a cópia15 Copyright 2012 Nokia
  16. 16. Qt implicit data sharing • Objeto somente é copiado se for modificado16 Copyright 2012 Nokia
  17. 17. Qt implicit data sharing • Como evitar deep-copy:  Use somente operadores e funções const se possível  Use o foreach com moderação  Passar objectos como const sempre é um bom hábito, mesmo quando estiver trabalhando com classes que não usam implicit data sharing  Exemplos?17 Copyright 2012 Nokia
  18. 18. Qt implicit data sharing • Exemplos: QTransform não usa implicit data sharing18 Copyright 2012 Nokia
  19. 19. Qt implicit data sharing • Acessem o documento “Implicitly Shared Classes” para ver a lista completa de classes que usam implicit data sharing no Qt • http://doc.qt.nokia.com/4.7-snapshot/implicit- sharing.html19 Copyright 2012 Nokia
  20. 20. Dicas de Otimização para QML20 Copyright 2012 Nokia
  21. 21. Dividir e conquistar21 Copyright 2012 Nokia
  22. 22. Dividir e conquistar • Dividir a interface da aplicação em múltiplos arquivos QML • Cada entidade lógica será um arquivo QML • Pensar em um modo Orientado a Objetos • Não usar um arquivo QML gigante22 Copyright 2012 Nokia
  23. 23. Dividir e conquistar • Usar o arquivo main.qml como a interface principal  Com diferentes states e transitions  Criar múltiplas views (.qml)  Importar diretórios contendo outros arquivos .qml23 Copyright 2012 Nokia
  24. 24. Load e Unload24 Copyright 2012 Nokia
  25. 25. Load e Unload • Usar o Loader para controlar o consumo de memória • Carregar somente o mínimo possível no inicio • Dinamicamente carregar e liberar componentes de UI • Criar componentes novos quando necessário25 Copyright 2012 Nokia
  26. 26. Load e Unload26 Copyright 2012 Nokia
  27. 27. Otimizar o uso de Imagens27 Copyright 2012 Nokia
  28. 28. Otimizar o uso de Imagens • Diminuir o consumo de memória • Especificar o tamanho exato da imagem • Evitar fazer resize/scaling de imagens no QML • Usar a propriedade smooth com moderação • Carregar imagens grandes em background (asynchronous=true) • Não fazer cache de imagens muito grandes (cache=false)28 Copyright 2012 Nokia
  29. 29. Operações com Strings29 Copyright 2012 Nokia
  30. 30. Operações com Strings • Uso exagerado do operador + resulta em múltiplas alcocações de memória • Usar StringBuilder sempre que possível • Definir  #define QT_USE_FAST_CONCATENATION  #define QT_USE_FAST_OPERATOR_PLUS30 Copyright 2012 Nokia
  31. 31. Dominar States, Transitions e Animations31 Copyright 2012 Nokia
  32. 32. States, Transitions eAnimations • Em um Transition, a área animada deve ser pequena • Animar diferentes itens sequencialmente sempre que possível • Evitar usar muitos Timers durante animações • Evitar fazer operações com JavaScript durante as animações • Usar ScriptAction e StateChandeScript32 Copyright 2012 Nokia
  33. 33. Seguir sempre as boas práticas de programação33 Copyright 2012 Nokia
  34. 34. Boas práticas • Para melhor performance use C++ e não JavaScript • Inserir propriedades sempre no topo das declarações de elementos • Criar a lógica da aplicação fora do QML • Não sobrepor muitas camadas de elementos QML • Usar Qt i18n para internacionalização34 Copyright 2012 Nokia
  35. 35. Links úteis • QML Performance Monitor  http://www.youtube.com/watch?v=XdI9C53uJw8 • Valgrind  http://valgrind.org/docs/manual/mc-manual.html • QML Performance Guidelines  http://doc.qt.nokia.com/4.7/qdeclarativeperformance .html • Qt Implicit Data Sharing  http://doc.qt.nokia.com/4.7-snapshot/implicit- sharing.html35 Copyright 2012 Nokia
  36. 36. Canais decomunicação• @nokiadev_brasil• http://bit.ly/NokiaDev_Qt_Brasil• http://blog.qtlabs.org.br/• willer.moreira@openbossa.org• willer.moreira@indt.org.br 36 Copyright 2012 Nokia
  37. 37. Perguntas?Copyright 2012 Nokia
  38. 38. Obrigado!Copyright 2012 Nokia

×