« 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)


sapito tico

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!!!