2011-03-04 19 views
13

¿Cuáles son los principales puntos clave que debe recordar un desarrollador de Flex para mejorar el rendimiento de las aplicaciones de Flex? las que vienen a la mente son:Consideraciones de rendimiento de Flex

  1. que se extienden desde ItemRenderers más clases base ligera: es decir, UIComponent
  2. utilizando suspendBackgroundProcessing establecidas en true para animaciones
  3. utilizando ArrayLists en lugar de ArrayCollections en su caso.
  4. useVirtualLayout en DataGroups Spark (por desgracia, este paso requiere Scrollers para hacer de este asesoramiento eficaz)
  5. optimizaciones de rendimiento SQLight para aplicaciones AIR (transacciones, etc.)
  6. Probablemente división de procesamiento de datos a largo en diferentes marcos? (Nunca lo hice, por lo que podría estar equivocado)

¿Cuáles son las pautas clave que debe seguir al desarrollar sus aplicaciones Flex3/Flex4/AIR para aumentar su rendimiento?

Respuesta

6

Aunque esto es menos importante con los Grupos de chispa más ligeros, siempre trato de mantener el número de contenedores anidados al mínimo y establecer posiciones/tamaños explícitos cuando sea posible. Las IU complicadas con contenedores de tamaño dinámico anidados entre sí causan una tonelada de medición (generalmente innecesaria) que debe ocurrir. Esto a menudo resulta en rezagos enormes cuando se cambia de una vista a otra.

+0

Suena bien, voy a cambiar mi marko

6

Mi lista:

uso
  • VARs locales en lugar de mundial tanto como sea posible
  • ActionScript en lugar de MXML tanto como sea posible
  • [Bindable] genera toneladas de código, tratar de evitar que

PS Автор, а ты русский язык знаешь? :)

+1

ага ......... :) –

+1

ты откуда будешь? – Tuco

+0

Лол, ребята! :) –

7

Me parece mucha gente tiene problemas de rendimiento w/itemRenderers. Entonces, mi única contribución aquí para nunca utilizar vinculante es un itemRenderer. Soluciono muchos errores de "fuga de memoria" de los clientes simplemente reescribiendo sus elementos Redactores para usar el evento dataChange en lugar de vinculante.

Más allá de eso, secundé el comentario de @Wade Mueller sobre evitar contenedores anidados tanto como fuera posible.

+0

¿Qué quiere decir cuando dice que reescribe el itemRenderer para usar el evento dataChange en lugar de vinculante? ¿Quiere decir anular el método de datos establecidos y asignar valores allí en lugar de asignar los valores dentro de los componentes itemRenderers individualmente? –

+0

@ Jason Towne En el itemRenderer, añadir un detector de eventos para el evento de cambio de datos (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/events/FlexEvent.html#DATA_CHANGE) y asignar valores en el controlador de eventos. Es ligeramente diferente a anular el método de datos establecidos; pero el concepto de asignar valles es el mismo de cualquier manera. Prefiero escuchar el evento dataChange en lugar de anular el método de datos establecidos; pero no tengo una buena razón para elegir un enfoque sobre el otro. – JeffryHouser

+0

Gracias por la aclaración. Eso tiene sentido. –

1

Las principales cosas que considero, en orden de importancia:

  1. Encuadernación

    • crea una gran cantidad de código extra, y puede causar una seria degradación en el rendimiento cuando las fijaciones no se eliminan . Por ejemplo, si reutiliza componentes en una aplicación, las funciones de escucha estarán activas durante todo el flujo de su aplicación, consumiendo memoria innecesaria y ciclos de CPU. Para aplicaciones más grandes, considere la clase BindingUtils.

    • Tenga en cuenta que no puede propiedades desvincular atado con llaves {myVariable}

  2. Validar (invalidar) las llamadas son algunas de las llamadas más caras de Flex. Tenga cuidado al usarlos.

    validateNow();

  3. Comprender el Flex component lifecycle. Anular estos métodos puede simplificar el proceso de creación de instancias.

  4. Utilice objetos vectoriales. More information.

  5. Ints> Números. Excellent SO answer.

consejos Algunos más básicos:

  1. no utilice operaciones costosas en bucles.

    for(var i:int = 0; i < massiveArray.length; i++) 
    

    En el caso de massiveArray, un arsenal muy grande, la longitud() podría ser una operación costosa. Asigne var massiveArrayLength:int = massiveArray.length; para mejorar el rendimiento.

  2. http://jacksondunstan.com/ tiene una gran cantidad de artículos sobre la optimización de su código. El hombre es un genio.

  3. Evite crear variables innecesarias, ya que la instanciación es costosa. Siempre reutilice las variables si es posible.

    function getComplexValue():int { 
        var i:int = complexCalculation(); // returns int after calculating 
        return i; 
    } 
    

    En cambio, sólo volver inmediatamente.

    function getComplexValue():int { 
        return complexCalculation(); 
    } 
    
  4. Si usted tiene acceso a ella, el perfil perspectiva de Flash es su amigo. Es un potente generador de perfiles que puede reducir el tiempo necesario para optimizar una base de código.

Cuestiones relacionadas