dicas de otimização para aplicações qt
TRANSCRIPT
![Page 1: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/1.jpg)
1
Dicas de otimização para aplicações Qt e QML.
Copyright 2012 Nokia
![Page 2: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/2.jpg)
Introdução
2
• Willer Moreira Bacharel em Ciência da Computação - UFAM Desenvolvedor de Software no INdT desde 2006 Projeto PySide Desenvolve aplicações Qt/QML
Copyright 2012 Nokia
![Page 3: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/3.jpg)
TÓPICOS
3
• Porque performance é importante
• Como melhorar a performance das suas aplicacões
• Perguntas
Copyright 2012 Nokia
![Page 4: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/4.jpg)
Porque performance é importante
4
• É 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âmicas
Copyright 2012 Nokia
![Page 5: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/5.jpg)
Porque performance é importante
5
• Qt Everywhere Desktop Plataformas embarcadas com recursos limitados
• Nem todas as aplicações podem tirar vantagem do uso
de múltiplos cores
Copyright 2012 Nokia
![Page 6: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/6.jpg)
Como melhorar a performance
6
• 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.
Copyright 2012 Nokia
![Page 7: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/7.jpg)
Teoria das restrições
7
• 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!
Copyright 2012 Nokia
![Page 8: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/8.jpg)
Identificando o gargalo
8
• 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.
Copyright 2012 Nokia
![Page 9: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/9.jpg)
Identificando o gargalo
9
• 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ção
Copyright 2012 Nokia
![Page 10: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/10.jpg)
Explorar o gargalo
10
• 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 eficiente
Copyright 2012 Nokia
![Page 11: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/11.jpg)
QVector vs QLinkedList vs QList
11
• 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 lentas
Copyright 2012 Nokia
![Page 12: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/12.jpg)
QVector vs QLinkedList vs QList
12
• QLinkedList Usada para grande quantitade de elementos Tempo constante para inserções e remoções
Copyright 2012 Nokia
![Page 13: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/13.jpg)
QVector vs QLinkedList vs QList
13
• QList De longe é o container mais usado Gera menos código para o executável Aloca espaço no inicio e no fim da estrutura
Copyright 2012 Nokia
![Page 14: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/14.jpg)
QVector vs QLinkedList vs QList
14
• 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 QLinkedList
Copyright 2012 Nokia
![Page 15: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/15.jpg)
Qt implicit data sharing
15
• Maximiza o reuso de objetos e minimiza a cópia
Copyright 2012 Nokia
![Page 16: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/16.jpg)
Qt implicit data sharing
16
• Objeto somente é copiado se for modificado
Copyright 2012 Nokia
![Page 17: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/17.jpg)
Qt implicit data sharing
17
• 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?
Copyright 2012 Nokia
![Page 18: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/18.jpg)
Qt implicit data sharing
18
• Exemplos:
QTransform não usa implicit data sharing
Copyright 2012 Nokia
![Page 19: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/19.jpg)
Qt implicit data sharing
19
• 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.html
Copyright 2012 Nokia
![Page 20: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/20.jpg)
Dicas de Otimização para QML
20 Copyright 2012 Nokia
![Page 21: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/21.jpg)
Dividir e conquistar
21 Copyright 2012 Nokia
![Page 22: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/22.jpg)
Dividir e conquistar
22
• 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 gigante
Copyright 2012 Nokia
![Page 23: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/23.jpg)
Dividir e conquistar
23
• 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 .qml
Copyright 2012 Nokia
![Page 24: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/24.jpg)
Load e Unload
24 Copyright 2012 Nokia
![Page 25: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/25.jpg)
Load e Unload
25
• 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ário
Copyright 2012 Nokia
![Page 26: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/26.jpg)
Load e Unload
26 Copyright 2012 Nokia
![Page 27: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/27.jpg)
Otimizar o uso de Imagens
27 Copyright 2012 Nokia
![Page 28: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/28.jpg)
Otimizar o uso de Imagens
28
• 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)
Copyright 2012 Nokia
![Page 29: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/29.jpg)
Operações com Strings
29 Copyright 2012 Nokia
![Page 30: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/30.jpg)
Operações com Strings
30
• 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_PLUS
Copyright 2012 Nokia
![Page 31: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/31.jpg)
Dominar States, Transitions e Animations
31 Copyright 2012 Nokia
![Page 32: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/32.jpg)
States, Transitions e Animations
32
• 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 StateChandeScript
Copyright 2012 Nokia
![Page 33: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/33.jpg)
Seguir sempre as boas práticas de programação
33 Copyright 2012 Nokia
![Page 34: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/34.jpg)
Boas práticas
34
• 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ção
Copyright 2012 Nokia
![Page 35: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/35.jpg)
Links úteis
35
• 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.html
Qt Performance Tuning Copyright 2012 Nokia
![Page 36: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/36.jpg)
Canais de comunicação
36
• @nokiadev_brasil • http://bit.ly/NokiaDev_Qt_Brasil • http://blog.qtlabs.org.br/ • [email protected] • [email protected]
Copyright 2012 Nokia
![Page 37: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/37.jpg)
Perguntas?
Copyright 2012 Nokia
![Page 38: Dicas de otimização para aplicações Qt](https://reader034.vdocuments.mx/reader034/viewer/2022051213/55ab21b01a28abdb058b4831/html5/thumbnails/38.jpg)
Obrigado!
Copyright 2012 Nokia