How can I improve the speed of this Adobe Flex script?
I am working on my first Adobe Flex application, and have a code section that appears to be running very slowly (but it does function properly!).
CC_Output is a text control, all the other controls are checkboxes (CC, CC_Duration, etc.)
Any help would be greatly appreciated!
<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 -开发者_JS百科 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"/>
In a vacuum, that code runs fine on my laptop (if I add in a CC control).
I rewrote it a bit to fast exit and that might improve things a bit in some cases.
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;
}
}
build one component for what you want to do and import that component into main application and use. then file size will decrease and performance will increase.
It strange that it runs slowly. Nothing special happens in the code.
Yes, the code is not clean, but that doesn't influence performance here.
Try to run Flex Profiler and find possible bottlenecks, if they exist.
精彩评论