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

38
1 Dicas de otimização para aplicações Qt e QML. Copyright 2012 Nokia

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

Page 1: Dicas de otimização para aplicações Qt

1

Dicas de otimização para aplicações Qt e QML.

Copyright 2012 Nokia

Page 2: Dicas de otimização para aplicações Qt

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Qt implicit data sharing

16

• Objeto somente é copiado se for modificado

Copyright 2012 Nokia

Page 17: Dicas de otimização para aplicações Qt

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

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

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

Dicas de Otimização para QML

20 Copyright 2012 Nokia

Page 21: Dicas de otimização para aplicações Qt

Dividir e conquistar

21 Copyright 2012 Nokia

Page 22: Dicas de otimização para aplicações Qt

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

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

Load e Unload

24 Copyright 2012 Nokia

Page 25: Dicas de otimização para aplicações Qt

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

Load e Unload

26 Copyright 2012 Nokia

Page 27: Dicas de otimização para aplicações Qt

Otimizar o uso de Imagens

27 Copyright 2012 Nokia

Page 28: Dicas de otimização para aplicações Qt

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

Operações com Strings

29 Copyright 2012 Nokia

Page 30: Dicas de otimização para aplicações Qt

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

Dominar States, Transitions e Animations

31 Copyright 2012 Nokia

Page 32: Dicas de otimização para aplicações Qt

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

Seguir sempre as boas práticas de programação

33 Copyright 2012 Nokia

Page 34: Dicas de otimização para aplicações Qt

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

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

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

Perguntas?

Copyright 2012 Nokia

Page 38: Dicas de otimização para aplicações Qt

Obrigado!

Copyright 2012 Nokia