Newsgroup: it.comp.www.php
Titolo: Performance if switch

Ciao a tutti...stavo riguardando una porzione di codice e ho
immaginato potesse essere ottimizzata...ma poi mi è sorto un dubbio
sull'effettiva validità di quella che io chiamo
ottimizzazione...spiego:
ad ora ho una cosa così:
switch ($dbdata['timeout']) {
    case "30":
    echo "<option value=\"30\" selected>30 minuti</option>;
    echo "<option value=\"60\">60 minuti</option>;
    echo "<option value=\"90\">90 minuti</option>;
    break;
    case "60":
    echo "<option value=\"30\">30 minuti</option>;
    echo "<option value=\"60\" selected>60 minuti</option>;
    echo "<option value=\"90\">90 minuti</option>;
    break;
    case "90":
    echo "<option value=\"30\">30 minuti</option>;
    echo "<option value=\"60\">60 minuti</option>;
    echo "<option value=\"90\" selected>90 minuti</option>;
    break;
}
ovviamente ho riportato per esempio, in realtà le option (ed i
relativi case) sono molti di più
quindi mi chiedevo...non sarebbe più performante magari scrivere così
la cosa?
if ($dbdata['timeout']=="30"{
echo "<option value=\"30\" selected>30 minuti</option>;
} else {
echo "<option value=\"30\">30 minuti</option>;
}
if ($dbdata['timeout']=="60"{
echo "<option value=\"60\" selected>60 minuti</option>;
} else {
echo "<option value=\"60\">60 minuti</option>;
}
if ($dbdata['timeout']=="90"{
echo "<option value=\"90\" selected>90 minuti</option>;
} else {
echo "<option value=\"90\">90 minuti</option>;
}
forse dico una castroneria ma così eviterei di ripetere l'intero "set"
delle option N volte quante esse sono per ogni CASE, però di contro ho
N IF quante option....
è più performante tanti if o (magari a livello di lettura codice)
tanti byte di codice in più?
grazie mille...Davide

 quante esse sono per ogni CASE
Computer Aided Software Engineering.

 punto. 
io faccio tutta quella roba proprio per scrivere il codice html!
è che in base al valore che sta nel db lui deve mettermi il parametro 
"selected" su una delle option che scrivo, se c'è un altro modo di farlo 
sarei curioso di sapere quale...

 }
Ti faccio un'altra proposta:
<?php
 $timers = array("30", "60", "90");
 foreach ($timers as $timer): ?>
  <option value="<?php echo $timer; ?>" <?php echo ($timer==$dbdata
["timeout"] ? 'selected="selected"' : ''); ?>>
   <?php echo $timer; ?> minuti
  </option>
<?php endforeach;?>

Alessandro Pellizzari ha scritto:

io di solito l'html lo faccio uscire via php diretto senza incorporare 
"pezzettini" di php in una pagina html...comunque
da quel che riesco a capisco però tu per ogni elemento dell'array fai un 
if...sbaglio? in questo caso sempre N If tanti quanti gli elementi 
dell'array farebbe....
tra parentesi visto che ci sono...è un modo "nuovo" (cioè ad esempio 
derivato dal php 5.x in poi) quello che usi o altro?

 ottimizzazione...spiego:
A parte i suggerimenti che ti hanno gi� dato ti diro' che stai 
ottimizzando i millesimi di secondo (ma probabilmente anche meno) ... ci 
sono ben altre parti di codice che possono portare benefici in termini 
di velocit� se ben ottimizzate.
Inoltre a voler proprio ottimizzare non devi usare le virgolette doppie 
se non devi espandere variabili. Infatti se usi le virgolette doppie il 
php deve analizzare tutta la stringa in esse contenuta per vedere se ci 
sono variabili prima di fare l'echo, molto meglio usare le virgolette 
singole:
     case 30:
     echo '<option value="30" selected>30 minuti</option>';
     echo '<option value="60">60 minuti</option>';
     echo '<option value="90">90 minuti</option>';
     break;
ciao
Mauro

 derivato dal php 5.x in poi) quello che usi o altro?
c'� sempre stato

 di byte, il tuo di qualche migliaio)
rivedendo gli sctript mi coreggo, la differenza di ocupazione di spazio �
ben maggiore di un ordine di grandezza.

 derivato dal php 5.x in poi) quello che usi o altro?
No, il foreach e` presente gia` da PHP4 (non so il 3, non ricordo), mentre 
il ternario quasi sicuramente era anche in PHP3. Anche la sintassi 
foreach:..endforeach; e` presente da parecchio tempo.
Bye.

 Bye.
il foreach si, ma il "ternario" non l'ho mai visto in nessun appunto 
consultato o tutorial...grazie per l'hint.

Redwiz ha scritto:

  e questo � male....grazie mille!

 comunque si prende in carico tutto no? (o magari c'è il barbatrucco...)
Si`, ma se usi un motore di templating in XML, o anche solo Smarty, e` 
comunque piu` lento del codice PHP puro, visto che e` altro codice PHP che 
interpreta un altro linguaggio.
Bye.

Alessandro Pellizzari ha scritto:

Non per niente come trucchetto per recuperare sulle performance il
risultato viene messo in cache.
micheg

Il 27/10/2009, Argaar ha detto :

è abbastanza semplice ... tu hai un elenco delle opzioni da qualche 
parte?