Como posso melhorar a velocidade desse script Adobe Flex?
-
05-07-2019 - |
Pergunta
Eu estou trabalhando em meu primeiro aplicativo Adobe Flex, e têm uma seção de código que parece estar funcionando muito lentamente (mas funciona corretamente!).
CC_Output é um controle de texto, todos os outros controles são caixas (CC, CC_Duration, etc.)
Qualquer ajuda seria muito 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"/>
Solução
Em um vácuo, que o código funciona muito bem no meu laptop (se eu adicionar em um controle CC).
Eu reescrevi-lo um pouco para sair rápido e que pode melhorar as coisas um pouco em alguns 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;
}
}
Outras dicas
componente uma compilação para o que você quer fazer e importação desse componente no aplicativo principal e uso. em seguida, o tamanho do arquivo vai diminuir eo desempenho vai aumentar.
É estranho que ele é executado lentamente. Nada de especial acontece no código.
Sim, o código não é limpo, mas isso não influencia o desempenho aqui.
Tente executar Flex Profiler e encontrar possíveis pontos de estrangulamento, se existirem.