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

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

Embed Size (px)

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

  • 1

    Dicas de otimizao para aplicaes Qt e QML.

    Copyright 2012 Nokia

  • Introduo

    2

    Willer Moreira Bacharel em Cincia da Computao - UFAM Desenvolvedor de Software no INdT desde 2006 Projeto PySide Desenvolve aplicaes Qt/QML

    Copyright 2012 Nokia

  • TPICOS

    3

    Porque performance importante

    Como melhorar a performance das suas aplicaces

    Perguntas

    Copyright 2012 Nokia

  • Porque performance importante

    4

    atrativo para o usurio

    Deixa sua aplicao com um aspecto mais profissional

    O processo de desenvolvimento da sua aplicao fica

    mais eficiente

    Interfaces dinmicas

    Copyright 2012 Nokia

  • Porque performance importante

    5

    Qt Everywhere Desktop Plataformas embarcadas com recursos limitados

    Nem todas as aplicaes podem tirar vantagem do uso

    de mltiplos cores

    Copyright 2012 Nokia

  • Como melhorar a performance

    6

    TOC - Theory of Constraints (ou Teoria das Restries)

    Esta teoria baseada na idia de que em qualquer

    sistema complexo, existe pelo menos uma restrio

    que limita sua habilidade de alcanar o seu objetivo ou

    funcionamento pleno. Para alcanar as melhorias

    nesse sistema essa restrio deve ser identificada e

    resolvida.

    Copyright 2012 Nokia

  • Teoria das restries

    7

    Defina uma meta?: Por exemplo: Esta aplicao deve rodar em 30 FPS

    E ento:

    (1) Identifique o gargalo (restrio) (2) Decida como explorar esse gargalo (3) Faa as melhorias necessrias (4) Se a meta no foi alcanada, volte para (1) Pronto!

    Copyright 2012 Nokia

  • 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 faa as medies no modo release.

    Copyright 2012 Nokia

  • Identificando o gargalo

    9

    Quando o gargalo identificado: Verifique se a implementao usada a melhor a

    ser usada para essa tarefa Uma vez que a melhor implementao foi escolhida,

    voc pode explorar esse gargalo

    Design Cdigo fonte Compilao

    Copyright 2012 Nokia

  • Explorar o gargalo

    10

    Dicas gerais: Cache Atrasar um processamento at que ele seja

    realmente necessrio Otimizaes de compilao

    Tcnicas de Otimizao para o Qt

    Escolher sempre o Container correto QVector vs QLinkedList vs QList

    Usar implicit data sharing de forma eficiente

    Copyright 2012 Nokia

  • QVector vs QLinkedList vs QList

    11

    QVector Itens so armazenados continuamente na memria Somente um bloco de memria alocado Inseres no inicio e no meio so lentas

    Copyright 2012 Nokia

  • QVector vs QLinkedList vs QList

    12

    QLinkedList Usada para grande quantitade de elementos Tempo constante para inseres e remoes

    Copyright 2012 Nokia

  • QVector vs QLinkedList vs QList

    13

    QList De longe o container mais usado Gera menos cdigo para o executvel Aloca espao no inicio e no fim da estrutura

    Copyright 2012 Nokia

  • QVector vs QLinkedList vs QList

    14

    QList mais fcil de usar e gera menos cdigo

    Na maioria dos caso, QList a ideal para se usar.

    Se voc s faz append(), use QVector

    Se voc deseja tempos constantes de insero e

    remoo no meio do array, use QLinkedList

    Copyright 2012 Nokia

  • Qt implicit data sharing

    15

    Maximiza o reuso de objetos e minimiza a cpia

    Copyright 2012 Nokia

  • Qt implicit data sharing

    16

    Objeto somente copiado se for modificado

    Copyright 2012 Nokia

  • Qt implicit data sharing

    17

    Como evitar deep-copy: Use somente operadores e funes const se

    possvel Use o foreach com moderao Passar objectos como const sempre um bom

    hbito, mesmo quando estiver trabalhando com classes que no usam implicit data sharing

    Exemplos?

    Copyright 2012 Nokia

  • Qt implicit data sharing

    18

    Exemplos:

    QTransform no usa implicit data sharing

    Copyright 2012 Nokia

  • 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

  • Dicas de Otimizao para QML

    20 Copyright 2012 Nokia

  • Dividir e conquistar

    21 Copyright 2012 Nokia

  • Dividir e conquistar

    22

    Dividir a interface da aplicao em mltiplos arquivos

    QML

    Cada entidade lgica ser um arquivo QML

    Pensar em um modo Orientado a Objetos

    No usar um arquivo QML gigante

    Copyright 2012 Nokia

  • Dividir e conquistar

    23

    Usar o arquivo main.qml como a interface principal Com diferentes states e transitions Criar mltiplas views (.qml) Importar diretrios contendo outros arquivos .qml

    Copyright 2012 Nokia

  • Load e Unload

    24 Copyright 2012 Nokia

  • Load e Unload

    25

    Usar o Loader para controlar o consumo de memria

    Carregar somente o mnimo possvel no inicio

    Dinamicamente carregar e liberar componentes de UI

    Criar componentes novos quando necessrio

    Copyright 2012 Nokia

  • Load e Unload

    26 Copyright 2012 Nokia

  • Otimizar o uso de Imagens

    27 Copyright 2012 Nokia

  • Otimizar o uso de Imagens

    28

    Diminuir o consumo de memria

    Especificar o tamanho exato da imagem

    Evitar fazer resize/scaling de imagens no QML

    Usar a propriedade smooth com moderao

    Carregar imagens grandes em background

    (asynchronous=true)

    No fazer cache de imagens muito grandes

    (cache=false)

    Copyright 2012 Nokia

  • Operaes com Strings

    29 Copyright 2012 Nokia

  • Operaes com Strings

    30

    Uso exagerado do operador '+' resulta em mltiplas

    alcocaes de memria

    Usar StringBuilder sempre que possvel

    Definir #define QT_USE_FAST_CONCATENATION #define QT_USE_FAST_OPERATOR_PLUS

    Copyright 2012 Nokia

  • Dominar States, Transitions e Animations

    31 Copyright 2012 Nokia

  • States, Transitions e Animations

    32

    Em um Transition, a rea animada deve ser pequena

    Animar diferentes itens sequencialmente sempre que

    possvel

    Evitar usar muitos Timers durante animaes

    Evitar fazer operaes com JavaScript durante as

    animaes

    Usar ScriptAction e StateChandeScript

    Copyright 2012 Nokia

  • Seguir sempre as boas prticas de programao

    33 Copyright 2012 Nokia

  • Boas prticas

    34

    Para melhor performance use C++ e no JavaScript

    Inserir propriedades sempre no topo das declaraes

    de elementos

    Criar a lgica da aplicao fora do QML

    No sobrepor muitas camadas de elementos QML

    Usar Qt i18n para internacionalizao

    Copyright 2012 Nokia

  • 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

  • Canais de comunicao

    36

    @nokiadev_brasil http://bit.ly/NokiaDev_Qt_Brasil http://blog.qtlabs.org.br/ [email protected] [email protected]

    Copyright 2012 Nokia

  • Perguntas?

    Copyright 2012 Nokia

  • Obrigado!

    Copyright 2012 Nokia

    Slide Number 1Slide Number 2Slide Number 3Slide Number 4Slide Number 5Slide Number 6Slide Number 7Slide Number 8Slide Number 9Slide Number 10Slide Number 11Slide Number 12Slide Number 13Slide Number 14Slide Number 15Slide Number 16Slide Number 17Slide Number 18Slide Number 19Slide Number 20Slide Number 21Slide Number 22Slide Number 23Slide Number 24Slide Number 25Slide Number 26Slide Number 27Slide Number 28Slide Number 29Slide Number 30Slide Number 31Slide Number 32Slide Number 33Slide Number 34Slide Number 35Slide Number 36Slide Number 37Slide Number 38