Foros del Web » Creando para Internet » Flash y Actionscript »

Optimizar rendimiento de un proyecto flex

Estas en el tema de Optimizar rendimiento de un proyecto flex en el foro de Flash y Actionscript en Foros del Web. hola amigos necesito optimizar el siguiente codigo lo q pasa q cumple su funcion pero come demaciado procesador cuando es una cantidad muy grande de ...
  #1 (permalink)  
Antiguo 07/01/2009, 19:18
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación Optimizar rendimiento de un proyecto flex

hola amigos necesito optimizar el siguiente codigo
lo q pasa q cumple su funcion pero come demaciado procesador cuando es una cantidad muy grande de usuarios y el problema q lo necesito para una cantidad grande me pueden decir como corregir eso aqui les dejo el link para q lo vean funcionando y el codigo xau
http://www.reflexpro.cl/freddy/exp_fase_01.html
Código:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#632626, #632626]" viewSourceURL="srcview/index.html">
<mx:Script>
	<![CDATA[
		import mx.collections.ArrayCollection;
		import mx.controls.ComboBox;
		import mx.controls.Label;
		import mx.containers.FormItem;
		import mx.controls.Alert;
		import mx.events.ValidationResultEvent;
		import mx.controls.Button;
		import mx.controls.TextInput;
		private var ar_grupos:Array;
		private var ar_sub_grupos:Array;
		private var ar_lista:ArrayCollection=new ArrayCollection;
		private function init_layer_grup():void{
			//carga de text input grupos
			for(var a:int=0;a<parseInt(num_grupos.text);a++)
			{
				var tem_num:int=a+1;
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem.name="form_grupos_"+a;
				tem_formitem.label="Grupos "+tem_num;
				tem_texinput.name="txt_grupos_"+a;
				tem_formitem.addChild(tem_texinput);
				layer_grupos.addChild(tem_formitem);
			}
			//carga de text inut sub grupos
			for(var a:int=0;a<parseInt(num_sub_grupos.text);a++)
			{
				var tem_num:int=a+1;
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem.name="form_sub_grupos_"+a;
				tem_formitem.label="Sub Grupos "+tem_num;
				tem_texinput.name="txt_sub_grupos_"+a;
				tem_formitem.addChild(tem_texinput);
				layer_sub_grupos.addChild(tem_formitem);
			}
		}
		private function init_layer_usuarios():void{
			//llenado combobox grupos
			ar_grupos=[];
			for(var a:int=0;a<parseInt(num_grupos.text);a++){
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem= layer_grupos.getChildByName("form_grupos_"+a)as FormItem;
				tem_texinput= tem_formitem.getChildByName("txt_grupos_"+a)as TextInput;
				ar_grupos.push({label:tem_texinput.text});
			}
			//llenado combobox sub grupos
			ar_sub_grupos=[];
			for(var a:int=0;a<parseInt(num_sub_grupos.text);a++){
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem= layer_sub_grupos.getChildByName("form_sub_grupos_"+a)as FormItem;
				tem_texinput= tem_formitem.getChildByName("txt_sub_grupos_"+a)as TextInput;
				ar_sub_grupos.push({label:tem_texinput.text});
			}
			//llenado de usuarios
			var y:int=0;
			for(var a:int=0;a<parseInt(num_usuarios.text);a++){
				var tem_num:int=a+1;
				//ini label
				var tem_label:Label=new Label();
				tem_label.text="Usuario "+tem_num+":";
				tem_label.move(10,y);
				layer_usuarios.addChild(tem_label);
				//fin label			
				//ini textinput
				var tem_texinput:TextInput=new TextInput();
				tem_texinput.name="usuario_"+a
				tem_texinput.move(80,y);
				layer_usuarios.addChild(tem_texinput);
				//fin textinput
				//ini combobox grupos
				var tem_combobox_grupos:ComboBox=new ComboBox();
				tem_combobox_grupos.name="grupos_"+a;
				tem_combobox_grupos.dataProvider=ar_grupos;
				tem_combobox_grupos.move(250,y);
				layer_usuarios.addChild(tem_combobox_grupos);
				//fin combobox grupos
				//ini combobox sub grupos
				var tem_combobox_sub_grupos:ComboBox=new ComboBox();
				tem_combobox_sub_grupos.name="sub_grupos_"+a;
				tem_combobox_sub_grupos.dataProvider=ar_sub_grupos;
				tem_combobox_sub_grupos.move(420,y);
				layer_usuarios.addChild(tem_combobox_sub_grupos);
				//fin combobox sub grupos
				y=y+30;
			}
		}
		private function init_layer_listado():void{
			for(var a:int=0;a<parseInt(num_usuarios.text);a++){
				//sacar datos nombre usuario
				var tem_texinput:TextInput=new TextInput();
				tem_texinput=layer_usuarios.getChildByName("usuario_"+a)as TextInput;
				//sacar datos grupo
				var tem_combo_grupo:ComboBox=new ComboBox();
				tem_combo_grupo=layer_usuarios.getChildByName("grupos_"+a)as ComboBox;
				//sacar datos sub grupos
				var tem_combo_sub_grupo:ComboBox=new ComboBox();
				tem_combo_sub_grupo=layer_usuarios.getChildByName("sub_grupos_"+a)as ComboBox;
				//traspaso a array collection
				ar_lista.addItem({usuario:tem_texinput.text, grupo:tem_combo_grupo.selectedLabel, sub_grupo:tem_combo_sub_grupo.selectedLabel});
			}
			data_lista.dataProvider=ar_lista;
		}
		private function validar_user():void{
			layer_con.selectedIndex=3;
		}
		private function validar_grup():void{
			layer_con.selectedIndex=2;
		}
		private function validarcantidades():void{
			var validar_usuarios:ValidationResultEvent=validar_usuarios.validate();
			var validar_grupos:ValidationResultEvent=validar_grupos.validate();
			var validar_sub_grupos:ValidationResultEvent=validar_sub_grupos.validate();
			
			if(validar_usuarios.type == ValidationResultEvent.VALID && validar_grupos.type == ValidationResultEvent.VALID && validar_sub_grupos.type == ValidationResultEvent.VALID)
			{
				layer_con.selectedIndex=1;
			}else{
				Alert.show("Faltan Datos Por Ingresar");
			}
		}
	]]>
</mx:Script>
<mx:StringValidator source="{num_usuarios}" property="text" requiredFieldError="Complete Cantidad de Usuarios" 
	trigger="{btn_can}" triggerEvent="click" id="validar_usuarios"/>
<mx:StringValidator source="{num_grupos}" property="text" requiredFieldError="Complete Cantidad de Grupos" 
	trigger="{btn_can}" triggerEvent="click" id="validar_grupos" />
<mx:StringValidator source="{num_sub_grupos}" property="text" requiredFieldError="Complete Cantidad de Sub Grupos" 
	trigger="{btn_can}" triggerEvent="click" id="validar_sub_grupos"/>
	<mx:TabNavigator width="685" height="544" horizontalCenter="0" verticalCenter="0" selectedIndex="0" id="layer_con">
		<mx:Form label="Inicio" width="100%" height="100%">
			<mx:FormHeading label="Cantidades"/>
			<mx:FormItem label="Usuarios">
				<mx:TextInput restrict="0-9" id="num_usuarios"/>
			</mx:FormItem>
			<mx:FormItem label="Grupos">
				<mx:TextInput restrict="0-9" id="num_grupos"/>
			</mx:FormItem>
			<mx:FormItem label="Sub Grupos">
				<mx:TextInput restrict="0-9" id="num_sub_grupos"/>
			</mx:FormItem>
			<mx:FormItem>
				<mx:Button label="Aceptar" id="btn_can" click="validarcantidades();"/>
			</mx:FormItem>
			</mx:Form>
		<mx:Canvas label="Grupos - Sub Grupos" width="100%" height="100%" initialize="init_layer_grup()">
			<mx:Form x="0" y="0" width="341" height="462" id="layer_grupos">
				<mx:FormHeading label="Grupos" textAlign="center"/>
			</mx:Form>
			<mx:Form x="342" y="0" width="50%" height="462" id="layer_sub_grupos">
				<mx:FormHeading label="Sub Grupos" textAlign="center"/>
			</mx:Form>
			<mx:Button x="608" y="479" label="Aceptar" click="validar_grup();"/>
		</mx:Canvas>
		<mx:Canvas label="Usuarios" width="100%" height="100%" initialize="init_layer_usuarios()">
			<mx:Button x="601" y="479" label="Aceptar" click="validar_user();"/>
			<mx:Canvas x="0" y="27" height="444" width="683" id="layer_usuarios">
			</mx:Canvas>
			<mx:Label x="80" y="1" text="Nombre" fontWeight="bold" fontSize="12"/>
			<mx:Label x="250" y="1" text="Grupo" fontWeight="bold" fontSize="12"/>
			<mx:Label x="420" y="1" text="Sub Grupo" fontWeight="bold" fontSize="12"/>
		</mx:Canvas>
		<mx:Canvas label="Listado" width="100%" height="100%" initialize="init_layer_listado()">
			<mx:DataGrid x="10" y="10" width="663" height="491" id="data_lista">
				<mx:columns>
					<mx:DataGridColumn headerText="Usuario" dataField="usuario"/>
					<mx:DataGridColumn headerText="Grupo" dataField="grupo"/>
					<mx:DataGridColumn headerText="Sub Grupo" dataField="sub_grupo"/>
				</mx:columns>
			</mx:DataGrid>
		</mx:Canvas>
	</mx:TabNavigator>
</mx:Application>
  #2 (permalink)  
Antiguo 25/05/2011, 09:09
 
Fecha de Ingreso: octubre-2007
Mensajes: 28
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Optimizar rendimiento de un proyecto flex

Tu problema, es la declaración de variables dentro de bucles, cada vez que declaras una variable en un bucle, significa que cargas en memoria tantas veces el objeto como largo sea el bucle.

Lo otro a considerar, no declares las variables de inicio dentro del bucle, eso tambien es una mala práctica.

Ejemplo ideal:

var a:int=0;
var largo:int = parseInt(num_grupos.text);

var tem_num:int;
var tem_formitem:FormItem;
var tem_texinput:TextInput;


//carga de text input grupos
for(;a<largo;a++)
{
tem_num=a+1;
tem_formitem = new FormItem();
tem_texinput = new TextInput();

tem_formitem.name="form_grupos_"+a;
tem_formitem.label="Grupos "+tem_num;
tem_texinput.name="txt_grupos_"+a;

tem_formitem.addChild(tem_texinput);
layer_grupos.addChild(tem_formitem);
}

Revisa todos los bucles, y cuando quieras ver la eficiencia de tu código usa la opción Flash Profile


Busca en google, buenas práctica de programación, optimizar código, yo recuerdo haber encontrado un pdf hace ya muchos (no recuerdo de donde lo sque, ni donde lo deje). Lo que si pude entender, que en todos los lenguajes de programación se puede aplicar las mismas prácticas, y si es Orientado a Objetos.


Alvaro
Temuco - Chile






Cita:
Iniciado por anikilatorbeta Ver Mensaje
hola amigos necesito optimizar el siguiente codigo
lo q pasa q cumple su funcion pero come demaciado procesador cuando es una cantidad muy grande de usuarios y el problema q lo necesito para una cantidad grande me pueden decir como corregir eso aqui les dejo el link para q lo vean funcionando y el codigo xau
http://www.reflexpro.cl/freddy/exp_fase_01.html
Código:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#632626, #632626]" viewSourceURL="srcview/index.html">
<mx:Script>
	<![CDATA[
		import mx.collections.ArrayCollection;
		import mx.controls.ComboBox;
		import mx.controls.Label;
		import mx.containers.FormItem;
		import mx.controls.Alert;
		import mx.events.ValidationResultEvent;
		import mx.controls.Button;
		import mx.controls.TextInput;
		private var ar_grupos:Array;
		private var ar_sub_grupos:Array;
		private var ar_lista:ArrayCollection=new ArrayCollection;
		private function init_layer_grup():void{
			//carga de text input grupos
			for(var a:int=0;a<parseInt(num_grupos.text);a++)
			{
				var tem_num:int=a+1;
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem.name="form_grupos_"+a;
				tem_formitem.label="Grupos "+tem_num;
				tem_texinput.name="txt_grupos_"+a;
				tem_formitem.addChild(tem_texinput);
				layer_grupos.addChild(tem_formitem);
			}
			//carga de text inut sub grupos
			for(var a:int=0;a<parseInt(num_sub_grupos.text);a++)
			{
				var tem_num:int=a+1;
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem.name="form_sub_grupos_"+a;
				tem_formitem.label="Sub Grupos "+tem_num;
				tem_texinput.name="txt_sub_grupos_"+a;
				tem_formitem.addChild(tem_texinput);
				layer_sub_grupos.addChild(tem_formitem);
			}
		}
		private function init_layer_usuarios():void{
			//llenado combobox grupos
			ar_grupos=[];
			for(var a:int=0;a<parseInt(num_grupos.text);a++){
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem= layer_grupos.getChildByName("form_grupos_"+a)as FormItem;
				tem_texinput= tem_formitem.getChildByName("txt_grupos_"+a)as TextInput;
				ar_grupos.push({label:tem_texinput.text});
			}
			//llenado combobox sub grupos
			ar_sub_grupos=[];
			for(var a:int=0;a<parseInt(num_sub_grupos.text);a++){
				var tem_formitem:FormItem=new FormItem();
				var tem_texinput:TextInput=new TextInput();
				tem_formitem= layer_sub_grupos.getChildByName("form_sub_grupos_"+a)as FormItem;
				tem_texinput= tem_formitem.getChildByName("txt_sub_grupos_"+a)as TextInput;
				ar_sub_grupos.push({label:tem_texinput.text});
			}
			//llenado de usuarios
			var y:int=0;
			for(var a:int=0;a<parseInt(num_usuarios.text);a++){
				var tem_num:int=a+1;
				//ini label
				var tem_label:Label=new Label();
				tem_label.text="Usuario "+tem_num+":";
				tem_label.move(10,y);
				layer_usuarios.addChild(tem_label);
				//fin label			
				//ini textinput
				var tem_texinput:TextInput=new TextInput();
				tem_texinput.name="usuario_"+a
				tem_texinput.move(80,y);
				layer_usuarios.addChild(tem_texinput);
				//fin textinput
				//ini combobox grupos
				var tem_combobox_grupos:ComboBox=new ComboBox();
				tem_combobox_grupos.name="grupos_"+a;
				tem_combobox_grupos.dataProvider=ar_grupos;
				tem_combobox_grupos.move(250,y);
				layer_usuarios.addChild(tem_combobox_grupos);
				//fin combobox grupos
				//ini combobox sub grupos
				var tem_combobox_sub_grupos:ComboBox=new ComboBox();
				tem_combobox_sub_grupos.name="sub_grupos_"+a;
				tem_combobox_sub_grupos.dataProvider=ar_sub_grupos;
				tem_combobox_sub_grupos.move(420,y);
				layer_usuarios.addChild(tem_combobox_sub_grupos);
				//fin combobox sub grupos
				y=y+30;
			}
		}
		private function init_layer_listado():void{
			for(var a:int=0;a<parseInt(num_usuarios.text);a++){
				//sacar datos nombre usuario
				var tem_texinput:TextInput=new TextInput();
				tem_texinput=layer_usuarios.getChildByName("usuario_"+a)as TextInput;
				//sacar datos grupo
				var tem_combo_grupo:ComboBox=new ComboBox();
				tem_combo_grupo=layer_usuarios.getChildByName("grupos_"+a)as ComboBox;
				//sacar datos sub grupos
				var tem_combo_sub_grupo:ComboBox=new ComboBox();
				tem_combo_sub_grupo=layer_usuarios.getChildByName("sub_grupos_"+a)as ComboBox;
				//traspaso a array collection
				ar_lista.addItem({usuario:tem_texinput.text, grupo:tem_combo_grupo.selectedLabel, sub_grupo:tem_combo_sub_grupo.selectedLabel});
			}
			data_lista.dataProvider=ar_lista;
		}
		private function validar_user():void{
			layer_con.selectedIndex=3;
		}
		private function validar_grup():void{
			layer_con.selectedIndex=2;
		}
		private function validarcantidades():void{
			var validar_usuarios:ValidationResultEvent=validar_usuarios.validate();
			var validar_grupos:ValidationResultEvent=validar_grupos.validate();
			var validar_sub_grupos:ValidationResultEvent=validar_sub_grupos.validate();
			
			if(validar_usuarios.type == ValidationResultEvent.VALID && validar_grupos.type == ValidationResultEvent.VALID && validar_sub_grupos.type == ValidationResultEvent.VALID)
			{
				layer_con.selectedIndex=1;
			}else{
				Alert.show("Faltan Datos Por Ingresar");
			}
		}
	]]>
</mx:Script>
<mx:StringValidator source="{num_usuarios}" property="text" requiredFieldError="Complete Cantidad de Usuarios" 
	trigger="{btn_can}" triggerEvent="click" id="validar_usuarios"/>
<mx:StringValidator source="{num_grupos}" property="text" requiredFieldError="Complete Cantidad de Grupos" 
	trigger="{btn_can}" triggerEvent="click" id="validar_grupos" />
<mx:StringValidator source="{num_sub_grupos}" property="text" requiredFieldError="Complete Cantidad de Sub Grupos" 
	trigger="{btn_can}" triggerEvent="click" id="validar_sub_grupos"/>
	<mx:TabNavigator width="685" height="544" horizontalCenter="0" verticalCenter="0" selectedIndex="0" id="layer_con">
		<mx:Form label="Inicio" width="100%" height="100%">
			<mx:FormHeading label="Cantidades"/>
			<mx:FormItem label="Usuarios">
				<mx:TextInput restrict="0-9" id="num_usuarios"/>
			</mx:FormItem>
			<mx:FormItem label="Grupos">
				<mx:TextInput restrict="0-9" id="num_grupos"/>
			</mx:FormItem>
			<mx:FormItem label="Sub Grupos">
				<mx:TextInput restrict="0-9" id="num_sub_grupos"/>
			</mx:FormItem>
			<mx:FormItem>
				<mx:Button label="Aceptar" id="btn_can" click="validarcantidades();"/>
			</mx:FormItem>
			</mx:Form>
		<mx:Canvas label="Grupos - Sub Grupos" width="100%" height="100%" initialize="init_layer_grup()">
			<mx:Form x="0" y="0" width="341" height="462" id="layer_grupos">
				<mx:FormHeading label="Grupos" textAlign="center"/>
			</mx:Form>
			<mx:Form x="342" y="0" width="50%" height="462" id="layer_sub_grupos">
				<mx:FormHeading label="Sub Grupos" textAlign="center"/>
			</mx:Form>
			<mx:Button x="608" y="479" label="Aceptar" click="validar_grup();"/>
		</mx:Canvas>
		<mx:Canvas label="Usuarios" width="100%" height="100%" initialize="init_layer_usuarios()">
			<mx:Button x="601" y="479" label="Aceptar" click="validar_user();"/>
			<mx:Canvas x="0" y="27" height="444" width="683" id="layer_usuarios">
			</mx:Canvas>
			<mx:Label x="80" y="1" text="Nombre" fontWeight="bold" fontSize="12"/>
			<mx:Label x="250" y="1" text="Grupo" fontWeight="bold" fontSize="12"/>
			<mx:Label x="420" y="1" text="Sub Grupo" fontWeight="bold" fontSize="12"/>
		</mx:Canvas>
		<mx:Canvas label="Listado" width="100%" height="100%" initialize="init_layer_listado()">
			<mx:DataGrid x="10" y="10" width="663" height="491" id="data_lista">
				<mx:columns>
					<mx:DataGridColumn headerText="Usuario" dataField="usuario"/>
					<mx:DataGridColumn headerText="Grupo" dataField="grupo"/>
					<mx:DataGridColumn headerText="Sub Grupo" dataField="sub_grupo"/>
				</mx:columns>
			</mx:DataGrid>
		</mx:Canvas>
	</mx:TabNavigator>
</mx:Application>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:22.