¿Cómo puedo mejorar la velocidad de este script de Adobe Flex?
-
05-07-2019 - |
Pregunta
Estoy trabajando en mi primera aplicación Adobe Flex y tengo una sección de código que parece estar ejecutándose muy lentamente (¡pero funciona correctamente!).
CC_Output es un control de texto, todos los demás controles son casillas de verificación (CC, CC_Duration, etc.)
Cualquier ayuda sería muy apreciada!
<mx:Script>
private function updateLabel():void {
var HPI_Score:Number = 0;
if (CC.selected) {CC_Output.text = "CC/HPI - Brief";}
if (!CC.selected) {
CC_Output.text = "CC/HPI - Inadequate";
} else {
if (CC_Duration.selected) {HPI_Score=HPI_Score+1;}
if (CC_Location.selected) {HPI_Score=HPI_Score+1;}
if (CC_Quality.selected) {HPI_Score=HPI_Score+1;}
if (CC_Severity.selected) {HPI_Score=HPI_Score+1;}
if (CC_Timing.selected) {HPI_Score=HPI_Score+1;}
if (CC_Context.selected) {HPI_Score=HPI_Score+1;}
if (CC_Modify.selected) {HPI_Score=HPI_Score+1;}
if (CC_Assoc.selected) {HPI_Score=HPI_Score+1;}
if (CC_Chronic_Dx.selected) {HPI_Score=HPI_Score+4;}
if (HPI_Score > 3) {CC_Output.text = "CC/HPI - Extended";}
}
}
</mx:Script>
<mx:TextArea id="LBL" x="262" y="28" enabled="true" visible="true" width="142"/>
<mx:CheckBox x="10" y="71" label="Duration" id="CC_Duration" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="92" label="Location" id="CC_Location" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="113" label="Quality" id="CC_Quality" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="134" label="Severity" id="CC_Severity" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="155" label="Timing" id="CC_Timing" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="176" label="Context" id="CC_Context" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="197" label="Modifying Factors" id="CC_Modify" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="218" label="Assoc Signs/Symptoms" id="CC_Assoc" enabled="true" visible="true" click="updateLabel();"/>
<mx:CheckBox x="10" y="239" label="Status of 3 Chronic Dx" id="CC_Chronic_Dx" enabled="true" visible="true" click="updateLabel();"/>
<mx:Label x="10" y="29" text="CC/HPI" fontWeight="bold" id="CC_Output"/>
Solución
En un vacío, ese código funciona bien en mi computadora portátil (si agrego un control CC).
Lo reescribí un poco para salir rápidamente y eso podría mejorar un poco las cosas en algunos casos.
private function updateLabel():void
{
const messageInadequate:String = "CC/HPI - Inadequate";
const messageBrief:String = "CC/HPI - Brief";
const messageExtended:String = "CC/HPI - Extended";
if (!CC.selected)
{
CC_Output.text = messageInadequate;
return;
}
if (CC_Chronic_Dx.selected)
{
CC_Output.text = messageExtended;
return;
}
var HPI_Score:int = 0;
if (CC_Duration.selected) HPI_Score++;
if (CC_Location.selected) HPI_Score++;
if (CC_Quality.selected) HPI_Score++;
if (CC_Severity.selected) HPI_Score++;
if (CC_Timing.selected) HPI_Score++;
if (CC_Context.selected) HPI_Score++;
if (CC_Modify.selected) HPI_Score++;
if (CC_Assoc.selected) HPI_Score++;
if (4 > HPI_Score)
{
CC_Output.text = messageBrief;
}
else
{
CC_Output.text = messageExtended;
}
}
Otros consejos
cree un componente para lo que quiere hacer e importe ese componente a la aplicación principal y úselo. entonces el tamaño del archivo disminuirá y el rendimiento aumentará.
Es extraño que se ejecute lentamente. Nada especial sucede en el código.
Sí, el código no está limpio, pero eso no influye en el rendimiento aquí.
Intente ejecutar Flex Profiler y encuentre posibles cuellos de botella, si existen.