Comment puis-je améliorer la vitesse de ce script Adobe Flex?
-
05-07-2019 - |
Question
Je travaille sur ma première application Adobe Flex et une section de code qui semble fonctionner très lentement (mais elle fonctionne correctement!).
CC_Output est un contrôle de texte, tous les autres contrôles sont des cases à cocher (CC, CC_Duration, etc.)
Toute aide serait grandement appréciée!
<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"/>
La solution
Dans le vide, ce code fonctionne correctement sur mon ordinateur portable (si j'ajoute un contrôle CC).
Je l'ai réécrit un peu pour sortir rapidement et cela pourrait améliorer un peu les choses dans certains cas.
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;
}
}
Autres conseils
construisez un composant pour ce que vous voulez faire et importez ce composant dans l'application principale et utilisez-le. la taille du fichier diminuera et les performances augmenteront.
C’est étrange que ça coule lentement. Rien de spécial ne se passe dans le code.
Oui, le code n'est pas propre, mais cela n'influence pas les performances ici.
Essayez d’exécuter Flex Profiler et recherchez les goulots d’étranglement éventuels, s’ils existent.