SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Thinking of CPU & Memory
  (Code for Responsiveness)
La aplicación funciona
       Terminado!
Por que?

1 de cada 4 personas abandona una web que
     tarda más de 4 segundos en cargar
Por que?

● Amazon: +100ms = -1% ventas
● Google: un incremento de 0.4 segundos a
  0.9 segundos en carga de pàgina equivale a
  un descenso de tràfico e ingresos del 20%
● Apps móviles?
Cada vez somos más
  vagos exigentes
El concepto
Caso clásico:
1.   Descargas datos
2.   Parseas
3.   Descargas más datos: imágenes, etc
4.   Cargas en memoria
5.   Los muestras en pantalla
Don't be a Java Hero

"Tengo la impresión de que Java fue diseñado
para hacer que fuera difícil escribir mal código,
mientras que Python está diseñado para hacer
    que sea sencillo escribir buen código."
              – Magnus Lycka
Como?
●   Compila contra el último SDK (hardware accel, p.ej)
●   Las splash-screens són malignas
●   No hacer trabajos en el UI Thread
●   No bloquear la UI (ProgressDialogs...)
●   GetView "ligeros"
●   No descargar los mismos datos 2 veces
    ○ punto 1 a tratar
●   Luchar por los 60fps
    ○ punto 2 a tratar
Velocidad
Strict Mode
.penaltyLog()
.penaltyDeath()
Red
(Enemigo nº 1)
Red (Análisis)

DDMS (Network Statistics)
Red (tip 1) - cache de string

      12s -> 0.4s (wifi mala, móvil bueno)
Red (tip 2) - cache de bitmaps

LruCache+DiskLruCache

● Displaying Bitmaps Efficiently (Android
  Developers)
● https://github.
  com/koush/UrlImageViewHelper
  ○ No gestiona bien vistas recicladas (aún)
CPU
No todos los móviles son de 4 núcleos
CPU (Análisis)

Traceview (code y DDMS)
Guardar y leer object

           7s -> 0.8s (móvil malo)
Mostrar datos
viejos siempre

 Ejemplo: Google+
 Mal-ejemplo: facebook
Memória RAM
Si no compartes, te echan
Mantener la aplicación en memoria (Análisis)

$ adb shell procrank
Mantener la aplicación en memoria (Tip)
Smoothness
Los preciados 60 fps
Smoothness
● Sección "robada" de:
    ○   http://www.curious-creature.org/docs/android-performance-case-study-1.html
    ○   http://www.curious-creature.org/2012/12/06/android-performance-in-practice/

●   Profile GPU rendering (4.1)
●   GPU Overdraw (4.2)
●   Systrace (4.1)
●   Hierarchy Viewer
Profile GPU Rendering
●   profile first 128 frames of every window
●   Activar en dispositivo (dev. options)
●   adb shell dumpsys glxinfo com.test.app
●   se necesitan <16ms por frame
Systrace
● Activar en dispositivo (dev. options)
● tools/systrace/systrace.py (5 seconds by default)
GPU OverDraw
● Como recomendación,
  podemos pintar cada pixel un
  máximo de 3 veces
● 9-patch for backgrounds
Hierarchy Viewer
Otras utilidades
●   Heap dump (memoria por objetos)
●   Eclipse MAT (memoria por objetos)
●   PerfMon (memoria, cpu, red en float)
●   Usage Timelines Pro (cpu, memoria)
●   traceview (cpu)
Detectar regresiones
● Guardar un long en Application y mostrar un
  Toast con la diferencia al mostrar los
  primeros datos
● Enviar por analytics velocidades de boot
"La optimización prematura es la raíz de
           todos los males"
            "Donald Knuth"
Reférencias
● Google I/O 2012 - Doing More With less: Beign a Good
  Android Citizen
● Designing for Performance (developer.android.com)
● "Displaying Bitmaps Efficiently" Android Developers
● http://www.curious-creature.org/docs/android-performance-
  case-study-1.html
● http://www.curious-creature.org/2012/12/06/android-
  performance-in-practice/

   twitter: @oriolj
   +Oriol Jiménez

Mais conteúdo relacionado

Semelhante a Thinking of CPU and Memory (2.0)

Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web EscalableAlex Puig
 
Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020Maximiliano Firtman
 
Aprende a montar tu ordenador antonio piedra fernández
Aprende a montar tu ordenador antonio piedra fernándezAprende a montar tu ordenador antonio piedra fernández
Aprende a montar tu ordenador antonio piedra fernándezapfgijon
 
Cloud para tu juego en una tarde
Cloud para tu juego en una tardeCloud para tu juego en una tarde
Cloud para tu juego en una tardeIgnacio Segura
 
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Gustavo Arjones
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance OptimizationMartín .
 
computadora para diseñadores y publicistas
computadora para diseñadores y publicistascomputadora para diseñadores y publicistas
computadora para diseñadores y publicistasNatalia Lopez Muñoz
 
La plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgLa plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgAntonio Cañas Vargas
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informaticaAlexis Luis
 
Tipos de sistemas operativos privativos y libres
Tipos de sistemas operativos privativos y libres Tipos de sistemas operativos privativos y libres
Tipos de sistemas operativos privativos y libres Henry Quintanilla
 
Desarrollo de apps móviles desde cero
Desarrollo de apps móviles desde ceroDesarrollo de apps móviles desde cero
Desarrollo de apps móviles desde ceroInitsogar
 
Tipos de sistemas operativos
Tipos de sistemas operativosTipos de sistemas operativos
Tipos de sistemas operativosHenry Quintanilla
 
Raid Por Software
Raid Por SoftwareRaid Por Software
Raid Por SoftwareRosariio92
 
Fase1 grupo103380 76%20(1)
Fase1 grupo103380 76%20(1)Fase1 grupo103380 76%20(1)
Fase1 grupo103380 76%20(1)Johana Lopez
 
Optimización del rendimiento
Optimización del rendimientoOptimización del rendimiento
Optimización del rendimientoFederico Peinado
 

Semelhante a Thinking of CPU and Memory (2.0) (20)

Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web Escalable
 
TRABAJO FINAL FASE 1
TRABAJO FINAL FASE 1TRABAJO FINAL FASE 1
TRABAJO FINAL FASE 1
 
Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020
 
Aprende a montar tu ordenador antonio piedra fernández
Aprende a montar tu ordenador antonio piedra fernándezAprende a montar tu ordenador antonio piedra fernández
Aprende a montar tu ordenador antonio piedra fernández
 
Cloud para tu juego en una tarde
Cloud para tu juego en una tardeCloud para tu juego en una tarde
Cloud para tu juego en una tarde
 
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance Optimization
 
¿Cómo iniciarse en programación Android?
¿Cómo iniciarse en programación Android?¿Cómo iniciarse en programación Android?
¿Cómo iniciarse en programación Android?
 
Palm OS - SO multitarea.
Palm OS - SO multitarea.Palm OS - SO multitarea.
Palm OS - SO multitarea.
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
computadora para diseñadores y publicistas
computadora para diseñadores y publicistascomputadora para diseñadores y publicistas
computadora para diseñadores y publicistas
 
La plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgLa plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.org
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Tipos de sistemas operativos privativos y libres
Tipos de sistemas operativos privativos y libres Tipos de sistemas operativos privativos y libres
Tipos de sistemas operativos privativos y libres
 
Desarrollo de apps móviles desde cero
Desarrollo de apps móviles desde ceroDesarrollo de apps móviles desde cero
Desarrollo de apps móviles desde cero
 
Tipos de sistemas operativos
Tipos de sistemas operativosTipos de sistemas operativos
Tipos de sistemas operativos
 
Raid Por Software
Raid Por SoftwareRaid Por Software
Raid Por Software
 
Fase1 grupo103380 76%20(1)
Fase1 grupo103380 76%20(1)Fase1 grupo103380 76%20(1)
Fase1 grupo103380 76%20(1)
 
Evolución de Windows
Evolución de Windows Evolución de Windows
Evolución de Windows
 
Optimización del rendimiento
Optimización del rendimientoOptimización del rendimiento
Optimización del rendimiento
 

Thinking of CPU and Memory (2.0)

  • 1. Thinking of CPU & Memory (Code for Responsiveness)
  • 3. Por que? 1 de cada 4 personas abandona una web que tarda más de 4 segundos en cargar
  • 4. Por que? ● Amazon: +100ms = -1% ventas ● Google: un incremento de 0.4 segundos a 0.9 segundos en carga de pàgina equivale a un descenso de tràfico e ingresos del 20% ● Apps móviles?
  • 5. Cada vez somos más vagos exigentes
  • 6. El concepto Caso clásico: 1. Descargas datos 2. Parseas 3. Descargas más datos: imágenes, etc 4. Cargas en memoria 5. Los muestras en pantalla
  • 7. Don't be a Java Hero "Tengo la impresión de que Java fue diseñado para hacer que fuera difícil escribir mal código, mientras que Python está diseñado para hacer que sea sencillo escribir buen código." – Magnus Lycka
  • 8. Como? ● Compila contra el último SDK (hardware accel, p.ej) ● Las splash-screens són malignas ● No hacer trabajos en el UI Thread ● No bloquear la UI (ProgressDialogs...) ● GetView "ligeros" ● No descargar los mismos datos 2 veces ○ punto 1 a tratar ● Luchar por los 60fps ○ punto 2 a tratar
  • 13. Red (tip 1) - cache de string 12s -> 0.4s (wifi mala, móvil bueno)
  • 14. Red (tip 2) - cache de bitmaps LruCache+DiskLruCache ● Displaying Bitmaps Efficiently (Android Developers) ● https://github. com/koush/UrlImageViewHelper ○ No gestiona bien vistas recicladas (aún)
  • 15. CPU No todos los móviles son de 4 núcleos
  • 17. Guardar y leer object 7s -> 0.8s (móvil malo)
  • 18. Mostrar datos viejos siempre Ejemplo: Google+ Mal-ejemplo: facebook
  • 19. Memória RAM Si no compartes, te echan
  • 20. Mantener la aplicación en memoria (Análisis) $ adb shell procrank
  • 21. Mantener la aplicación en memoria (Tip)
  • 23. Smoothness ● Sección "robada" de: ○ http://www.curious-creature.org/docs/android-performance-case-study-1.html ○ http://www.curious-creature.org/2012/12/06/android-performance-in-practice/ ● Profile GPU rendering (4.1) ● GPU Overdraw (4.2) ● Systrace (4.1) ● Hierarchy Viewer
  • 24. Profile GPU Rendering ● profile first 128 frames of every window ● Activar en dispositivo (dev. options) ● adb shell dumpsys glxinfo com.test.app ● se necesitan <16ms por frame
  • 25. Systrace ● Activar en dispositivo (dev. options) ● tools/systrace/systrace.py (5 seconds by default)
  • 26. GPU OverDraw ● Como recomendación, podemos pintar cada pixel un máximo de 3 veces ● 9-patch for backgrounds
  • 28. Otras utilidades ● Heap dump (memoria por objetos) ● Eclipse MAT (memoria por objetos) ● PerfMon (memoria, cpu, red en float) ● Usage Timelines Pro (cpu, memoria) ● traceview (cpu)
  • 29. Detectar regresiones ● Guardar un long en Application y mostrar un Toast con la diferencia al mostrar los primeros datos ● Enviar por analytics velocidades de boot
  • 30. "La optimización prematura es la raíz de todos los males" "Donald Knuth"
  • 31. Reférencias ● Google I/O 2012 - Doing More With less: Beign a Good Android Citizen ● Designing for Performance (developer.android.com) ● "Displaying Bitmaps Efficiently" Android Developers ● http://www.curious-creature.org/docs/android-performance- case-study-1.html ● http://www.curious-creature.org/2012/12/06/android- performance-in-practice/ twitter: @oriolj +Oriol Jiménez