« Reloj binario. | Main | update »
November 08, 2006, 07:42 AM
de embedding assets y peso final
Recientemente estaba tratando de optimizar un proyecto en flex (tratando de reducir el peso del swf final), ya que de todas maneras el framework the flex nos regala apróximadamente 100kb (usando algún uicomponent de la familia
Pensábamos que el embeder el mismo asset desde diferentes mxml, nos resultaría en una swf final de mejor tamaño; estos fueron los resultados.
las pruebas concistieron en probar las diferentes formas de embeder imágenes dentro de una aplicación de flex, en estas pruebas usé el mismo jpg (16kb)

Prueba 1: simple embeding
Embedir una imagen de manera normal para tener el peso final de un swf "normal" (asignando el valor del embed a una variable tipo clase, y usando esta como source del objeto image)
<?xml version="1.0" encoding="utf-8"?> <!-- single asset embed --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ [Embed(source='/assets/frogcr.jpg')] [Bindable] public var asset:Class; ]]> </mx:Script> <mx:Image source="{asset}" /> </mx:Application>
Peso del swf: 139kb (gracias por lo 123kb, adobe)
Prueba 2: embediendo la image dos veces, mismo archivo
Esta vez se embede directamente la imagen en un objeto Image, y el source del otro se hace igual que en el ejemplo anterior.
<?xml version="1.0" encoding="utf-8"?> <!--same asset embedded twice, same document --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="425"> <mx:Script> <![CDATA[ [Embed(source='/assets/frogcr.jpg')] [Bindable] public var asset:Class; ]]> </mx:Script> <mx:Box> <mx:Image source="{asset}" /> <mx:Image source="@Embed(source='/assets/frogcr.jpg')" /> </mx:Box> </mx:Application>
Peso final del swf: 139kb
Prueba 3: mismo jpg, diferentes mxml, mismo nombre
Esta vez, utilizo el archvo en un componente externo
AssetInComponent.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="204" verticalScrollPolicy="off" horizontalScrollPolicy="off"> <mx:Script> <![CDATA[ [Embed(source='/assets/frogcr.jpg')] [Bindable] public var asset:Class; ]]> </mx:Script> <mx:Image source="{asset}" /> </mx:Canvas>
y lo importo dentro de la aplicación principal, donde también embedo la imagen;nótese que ambos nombres del la variable tipo Class tienen el mismo nombre),
<?xml version="1.0" encoding="utf-8"?> <!-- same asset embedded once in local file, another one in external file (same var name) --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="absolute" height="425"> <mx:Script> <![CDATA[ [Embed(source='/assets/frogcr.jpg')] [Bindable] public var asset:Class; ]]> </mx:Script> <mx:Box> <local:AssetInComponent/> <mx:Image source="{asset}" /> </mx:Box> </mx:Application>
Peso final del swf: 140kb (hey!, estamos agregando un xml externo, está bien que este pese 1kb!)
Prueba 4: mismo jpg, diferentes archivos, diferente nombre
Utilizando el mismo archivo que en el ejemplo anterior (AssetInComponent.mxml), pero esta vez la variable local tiene un nombre diferente
<?xml version="1.0" encoding="utf-8"?> <!-- same asset embedded once in local file, another one in external file (different var name) --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="absolute" height="425"> <mx:Script> <![CDATA[ [Embed(source='/assets/frogcr.jpg')] [Bindable] public var localAsset:Class; ]]> </mx:Script> <mx:Box> <local:AssetInComponent/> <mx:Image source="{localAsset}" /> </mx:Box> </mx:Application>
Peso final del swf: 140kb
Resumen
Prueba 1: 139kb
Prueba 2: 139kb,
Prueba 3: 140kb,
Prueba 4: 140kb
Conclusión
No hace falta ser ciéntico nuclear para darnos cuenta que no afecta en lo más mínimo cuántas veces se embeda un mismo asset en diferentes o en mismos archivos, claro lo ideal es poder tener los archivos en un solo lugar para asi sólo editar un lado en el caso de cambiar el asset o el nombre del mismo (acá es cuando mr Singleton nos viene de maravilla).
Pues que mal, que los swf pesen tanto, pero que bien que la librería no sea tan tonta y reconozca un asset para evitar aplicaciones aún más pesadas (recuerdo que el desktop de computadora.de pesaba 85kb, y eso que era un casi que shell =/ )
mr. zip vivé acá
Posted by kada
Comentarios
1Gustavo , (November 18, 2006 08:28 PM):
Que buen test!! .. simple pero muy útil para saber como el comportamiento con archivos cargados.
Saludos kada!!!


