Optimización en Flex

Ahora es mi turno para postear la presentación de “Optimización en Flex” del pasado Mif Onsite III.

Para los que no pudieron asistir; la presentación pretendía ser una introducción básica a los conceptos de rendimiento y gestión de memoria en Flex, así como mostrar algunas técnicas de optimización mediante ejemplos prácticos y muy sencillos.

Elastic racetrak

Slides:

Código:

A continuación una breve explicación del código que se enseñó:

Garbage Collector

1.1.OptFlex_GarbageCollector: Objetos con contador de referencias positivo, cero y un caso de referencia circular (nivel básico)

Profiler

2.1.OptFlex_performance_flex: Un simple bucle con traces donde, al usar el profiler, podemos comprobar el número de veces que se llama a la función, su self time y su cumulative time (nivel básico)

2.2.OptFlex_memory_flex: Creación de un botón cada segundo para poder comprobar el crecimiento paralelo de la memoria actual y la de pico (nivel básico)

Escenarios

3.1.OptFlex_binding: Este ejemplo está inspirado en un post de Doug McCune y demuestra un caso en el que una variable bindable hace que una función de filtrado vaya mucho más lenta (nivel medio)

3.2.OptFlex_modules: En este ejemplo se puede ver un caso muy sencillo de mejora del rendimiento percibido. Se demuestra como cargando un módulo desde el inicio o cargándolo después de que aparezca la pantalla de login puede hacer que el usuario perciba unos mejores tiempos de carga (nivel básico)

3.3.OptFlex_ordered_creation: Este es otro caso de mejora del rendimiento percibido. Cambiando el parámetro creationPolicy de un container a queued, podemos hacer que cargue su contenido de manera ordenada, con lo que hacemos que el usuario perciba una mayor velocidad de carga (nivel básico)

3.4.OptFlex_pool: Demostración simple de una técnica de gestión de una pool de objetos reutilizable (nivel medio)

3.5.OptFlex_repeater: Comparación de memoria (mediante profiler) y experiencia de usuario entre un componente repeater y una lista (nivel básico)

3.6.OptFlex_itemRenderer: Implementación de un itemRenderer en mxml y su equivalente basado en AS3 extendiendo de UIComponent y sobreescribiendo los métodos CreateChildren, CommitProperties y UpdateDisplayList (nivel medio)

3.7.OptFlex_references: Generación de un memory leak creando popups de manera indefinida y registrando una referencia desde Application (nivel básico)

3.8.OptFlex_cacheAsBitmap: Comparación de rendimiento mediante el uso del modificador cacheAsBitmap de la clase DisplayObject (nivel básico)

3.9.OptFlex_algorithm: Algunas técnicas sencillas para optimizar código AS3 (nivel básico-medio)

Si tenéis cualquier comentario, crítica o duda sobre la presentación dejad un mensaje y lo comentamos.

15 Comentarios

  1. Pingback: Optimización en Flex » articulo » TheKlue: Flex, Flash y otras tecnologías RIA

  2. Juan Manuel Schenini

    Muchas gracias por compartir esto (también extiendo mis agradecimientos para los anteriores post de los oradores). Realmente me hubiera encantado estar en las charlas, pero como no puedo de esta manera puedo aprender de Uds. y plantear mis dudas también. En definitiva, GRACIAS!!

  3. Carlos

    Buenas a todos. No me gustaría que este comentario fuera tomado a mal, pero creo que debo ser algo crítico tanto con el MifOnSite’08 como con el concurso de Air. He de decir que el MifOS’08 ha sido mi primer evento de este tipo al que asistía y sinceramente me volví “pa” casa muy decepcionado. Creo que solo saqué algo de provecho de la charla de Optimización de código, papervision3d y de las novedades que saldrán próximamente. Las otras ponencias me interesaron poco, e incluso algunas me parecieron fuera de lugar. Diciendo esto solo quiero hacer una crítica constructiva, y no provocar las iras de nadie.

    Respecto al concurso no sé cómo explicarlo. La verdad es que participé y como todos los perdedores pues te quedas un poco desilusionado. Entonces es cuando dices: “Voy a ver a los ganadores a ver si pillo alguna idea nueva o que han hecho para que su aplicación esté ahí arriba…”. Abro la web del marketplace, y resulta ser que no encuentro a ninguno de los ganadores (y eso que en las bases decía que había que colgarlo allí). En eso pienso, bueno yo tampoco lo subí, así que no pondremos pegas a eso…. pero claro mirando a ver si había suerte con las menciones especiales, consigo encontrar un proyecto publicado, el MoleHunt. Maximiliano no te cabrees, pero para un programador de air hacer esa aplicación no le lleva mucho más de una tarde (incluyendo los gráficos).

    En fin lo dicho solo es un poco de crítica constructiva. Pero si queremos ser serios, hay que ser serio.

    Saludos.

  4. Carlos Rovira

    Carlos, Xavi, (que curioso que sean justo esos dos nombres 😉 )

    Solo deciros que lamento que no esteis contentos con el evento y el concurso, pero me agrada que haya criticas negativas (aunque constructivas) y que no solo se envíen los comentarios positivos.

    Creo que esto es importante para la mejora futura, y por eso pedí ese feedback en el post :

    http://www.madeinflex.com/2008/10/20/despues-del-mif-onsite-iii/

    Desde la parte que me toca en la organización del evento. Este tipo de acciones las hacemos con mucha ilusión y buscando que sean del mayor interés para todos. Podéis imaginar el esfuerzo y el tiempo que lleva organizar y preparar una jornada como esta y la cantidad de gente implicada para que todo sea lo más aprovechable. Con todo, no siempre toda la gente sale contenta de dichas jornadas por muy diversos motivos.

    Animo a otros asistentes a mandarnos más opiniones (también pediría que se colgasen en el post antes mencionado, ya que tiene más sentido que en este).

    Por otra parte, también quiero aprovechar para ser yo también un poquito crítico y pedir a aquellos que quieren mejoras que sean proactivos y que empiecen por aportar a la comunidad.

  5. Alfonso Ribera

    Estoy de acuerdo con todo lo que se ha dicho. Se que preparar un evento es muy complicado.

    Pero me gustaria sugerir una cosa para el próximo evento. Estaría bien que antes se sugirieran varios temas para las charlas. Asi todos podrían decidir cuales les interesan mas.

    Respecto a lo de aportar a la comunidad. Estaria bien que colgaseis las aplicaciones que participaron en el concurso en esta web.

  6. Xavi

    Hola de nuevo.

    Antes que nada, disculpas a Alberto Alcaraz por utilizar su post de opmitización para tratar este tema 🙂

    Y siguiendo con el hilo, creo que lo que expone Alfonso sería bueno para la comunidad, saber de primera mano cuales son las preferencias/inquietudes de la comunidad sobre el mundo flexero. Conocer cuales son los puntos fuertes que se deberían tratar y que son desconocidos y motivadores para todos.

    Quizás al organizarse pocos eventos a nivel nacional se espera que estas ponencias ofrezcan más ponencias sin ánimo de lucro y que sean más didacticas en lo que a flex/as se refiere.

    Ya se sabe que quizás no todo el mundo tenga el tiempo suficiente para desarrollar un tema desde 0 y que sea del agrado de todos pero creo que merece la pena.

    Por otro lado, y ya que estamos, estaría bien “no se como” de dar un nuevo empuje a la comunidad ya que parece como que está en estado stand by, al contrario de otras comunidades Flexeras de otros paises (véase India).

    Tendríamos que ser un país/comunidad de referencia en temas de Flex y creo que no se está consiguiendo.

    Necesitamos un lavado de cara. ¿MadeInFlex 2.0?…

    Eso es todo. Un saludo a todos.

  7. Alfonso Ribera

    Discupa Alberto Alcaraz, pero este tema creo que es interesante.

    A ver Xavi, tampoco vale con decir que necesitamos un lavado de cara y ya está. Hay que aportar sugerencias. ¿Que crees que le hace falta a la comunidad? ¿Como mejorarias lo que ya hay?

    Por ejemplo, estaría bien crear proyectos opensource donde todos pudieramos participar. También en la parte de RRHH un apartado FreeLance donde la gente expusiera sus necesidades flex/flash (librerias, diseños, estilos, etc.)

  8. Xavi

    Quizás un nuevo portal, con más apartados (foros, showcase, apartado de codigos/librerías, etc…) algo con lo que la gente pueda participar más activamente. Es decir, un buen motivo para entrar en http://www.madeinflex.com.

    Ya se que existe la lista de correo, pero creo que no es suficiente.

    No se si es únicamente una percepción mia, pero … si estos comentarios se huvieran posteado en la lista, seguramente mucha más gente opinaría. Sin embargo al estar por aquí nadie comenta (ni positiva ni negativamente). Eso parece un síntoma de que la gente no entra a madeinflex por que sí, y es lo que hay que conseguir.

    Un saludo.

  9. Zandy

    Hola flexeros. 😉

    Buena esa alberto, un tema bastante interesante y del cual no hay mucha literatura en castellano.

    salu2
    z\d\y

  10. Pingback: MIF OnSite III - Resumen » Luis Adrián Rosas Wiedfeldt

  11. Pingback: MadeInFlex » Blog Archive » Escribe el futuro de MadeInFlex

  12. Josema

    Ante todo gracias por este post. He estudiado los ejemplos y son de mucha utilidad. Y aprovechando que habeis sacado el tema me gustaria hacer una consulta a los gurus de Flex jeje.

    Supongamos que voy creando muchos Panels y añadiendolos en un contenedor. Eso aumentará la memoria. Sin embargo si yo hago un removeChild la memoria no disminuye. Existe alguna manera en flex de optimizar esto?

    Un saludo. Y gracias de antemano.

  13. Alberto Alcaraz

    Hola Josema, me alegro que te haya servido de utilidad la presentación y perdona que haya tardado en responder.

    De hecho, si que debería disminuir la memoria al ir borrando paneles. Asegúrate que no se estén quedando referencias o listeners a los paneles, ya que esto haría que le garbage collector no los marcara para borrar.

    Si pruebas este código, podrás ver con el profiler como cada cierto tiempo baja la memoria:


    < ?xml version="1.0" encoding="utf-8"?>


    < ![CDATA[ import mx.containers.Panel; private function init():void { var timer:Timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); } private function onTimer(event:TimerEvent):void { var panel:Panel = new Panel(); this.addChild(panel); this.removeChild(panel); } ]]>


    Espero que te sirva, y si tienes cualquier duda, vuelvela a postear y la comentamos.

    Un saludo,

    Alberto

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acerca de Made In Flex

Made In Flex es una comunidad de desarrolladores de Apache Flex creada en 2006.

Apache Flex, anteriormente conocido como Adobe Flex, es un SDK (kit de desarrollo de software) para crear aplicaciones enriquecidas - multiplataforma basadas en Adobe Flash donado por Adobe a la fundación Apache in 2011 y promocionado a proyecto de primer nivel en Diciembre de 2012.

Actualmente estamos cambiando muchos aspectos del sitio web para ofrecer un sitio útil para toda la comunidad que tenga en cuenta las necesidades actuales.

Últimas Fotos

Instalador de Apache Flex

Entrar o Registrase