Salve, visto l'insuccesso dello scorso quesito (che dovrei aver risolto scrivendo più codice per distruggere e controllare piuttosto che che per creare) ne pongo un altro.
Situazione:
carico dei dati dal server, sono tanti ... cioè non tantissimi ma abbastanza da creare problemi al player.
trattasi di un paio di migliaia di contatti, caricati in LoadVars e suddivisi, per ogni contatto, in circa una decina di informazioni.
L'operazione di parsing, tramite il benchmark da me effettuato, dura circa 1 secondo sul mio Centrino 1.6, sicuramente non l'ultimo e veloce processore ma per me ancora buono.
Il ciclo che impegna la CPU è fatto così
il codice è semplice, funziona alla perfezione ma su un PC non molto potente (un Mac non recente, un Pentium 3 e probabilmente altri) fa scattare "l'allarme" al player con una finestra di dialogo che dice:codice:// codice all'interno di un onLoad var a:Number = 0; while(this["info" + a]) { // parsa ed assegna valori ++a; // ++a va più veloce di a++ su loop "consistenti" }
"Questo movie sta effettuando un loop infinito, fermare le operazioni ?"
Dopo aver dato sfogo a tutte le mie risorse per ottimizzare e velocizzare il parsing, senza ottenere risultati differenti, mi è venuta in mente una cosa "stupida", ovvero prendere in giro il Flash Player.
Come ? Semplicemente switchando da while a for il loop, sapendo che più di 5.000 risultati non potranno esserci (l'idea era questa: "ora non può pensare che sia un loop infinito").
Ora, sebbene sembra che il problema sia risolto, scopo sempre primario, questa soluzione non mi sembra ne troppo coerente ne troppo pulita e soprattutto non mi sembra portabile o scalabile.codice:for(var a:Number = 0; a < 5000; a++) { if(this["info" + a]) { // parsa ed assegna valori } else a = 5000; // termina il loop }
Qualcuno di voi sa se esiste un modo per dire al player che si è certi che il loop while non è infinito o conosce un modo scalabile per affrontare la questione ?
Grazie
[edit]
operazioni tentate prima del for:
1 - usare array e join per concatenare le stringhe (in JS è più veloce, in AS nemmeno tanto)
2 - usare proprietà predefinite in un array per evitare di riconcatenare ogni parametro
3 - usare una funzione "a steps", ovvero in grado di fare il while ed uscire di 100 in 100, o 500 in 500
4 - mettere su caffè, fumare 12 sigarette, pulire il fornello dal caffè strabordato, bruciato e bollito
5 - altro ancora ...