[PHP] entriamo nei dettagli tecnici

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
rockstar86
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 310
Iscrizione: domenica 21 maggio 2006, 14:21
Località: palo alto - california
Contatti:

[PHP] entriamo nei dettagli tecnici

Messaggio da rockstar86 »

salve a tutti sono di nuovo qui con qualche domanda/curiosità sul php e sono particolarmente interessato ad aspetti tecnici anzi al dilà di queste domande sarei lieto di ricevere link o titoli di testo sui quali approfondire questi aspetti:

Partiamo dal primo quesito.
Capita spesso in pagine php di voler utilizzare componenti tipici dell'html (un per esempio).
in questo caso quale delle due procedure è tecnicamente (e a livello di complessità di esecuzione da parte del broser) migliore?
questa:

Codice: Seleziona tutto

<?php
echo "questo è un div";
?>
<div>
<?php echo "testo nel div";?>
</div>
<?php
...
oppure:

Codice: Seleziona tutto

<?php
echo "questo è un div";
print '<div>';
echo "testo nel div";
print '</div>';
...
sicuramente le deu procedure hanno risultato analogo nella visualizzazione in una pagina ma quello che mi chiedo è: quale delle due è tecnicamente conveniente? quale delle due ha complessità interpretativa minore? quale è di più rapida esecuzione per un browser?
CaesarBlog.com
Veni, Vidi, BlogIT!
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da Volans »

Entrambe generano la stessa identica pagina html quindi per il browser non ci sarà alcuna differenza, in caso differenze ce ne sono per il server che interpreterà le pagine php per generare quelle (x)html che invierà al browser.

In quanto ad convenienza dipende da tanti fattori, dalle impostazioni del php (sia file di configurazione che opzioni di compilazione), hardware del server, ecc....

Ci sono di base due modi per poter testare quale delle due è migliori, uno pratico ed uno teorico.
Quello pratico è usare un programma che faccia benchmark come ad esempio ab per Apache, quello teorico è andare a vedere come sono scritte in C le varie funzioni usate del php, fattibile nel caso di questo semplicissimo esempio, impraticabile già per script php un po' più lunghi... ;)

P.S. come mai nel secondo esempio usi echo e print? Potresti usare un'unica riga... :D
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
rockstar86
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 310
Iscrizione: domenica 21 maggio 2006, 14:21
Località: palo alto - california
Contatti:

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da rockstar86 »

Ti ringrazio per la rapida quanto dettagliata risposta.
Quegli strumenti per il benchmark posso eseguirli anche su un sito che tengo su un host? oppure genera dei tentativi di intrusione o amenità varie che il gestore del server può inventarsi?
P.S. come mai nel secondo esempio usi echo e print? Potresti usare un'unica riga...
Esatto anche questa è una delle mie domande
echo "ciao".$nomeUtente;
ha la stessa complessità di
echo "ciao"
echo $nomeutente;
???

so benissimo che non è certo su queste sottigliezze che si opera un ottimizzazione però mi piace capire a fondo le cose e non credo di potermi basare solo sul paradigma: meno codice = più veloce
CaesarBlog.com
Veni, Vidi, BlogIT!
Avatar utente
hds619
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 352
Iscrizione: domenica 15 aprile 2007, 20:23
Località: Ferrara
Contatti:

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da hds619 »

rockstar86 ha scritto: Esatto anche questa è una delle mie domande
echo "ciao".$nomeUtente;
ha la stessa complessità di
echo "ciao"
echo $nomeutente;
???

so benissimo che non è certo su queste sottigliezze che si opera un ottimizzazione però mi piace capire a fondo le cose e non credo di potermi basare solo sul paradigma: meno codice = più veloce
Mmm ti parlo da programmatore C ( quindi magari in php è leggermente diverso ) due chiamate come: pippo("ciao"); e pippo(" come va?"); dovrebbero impegnare di più ( si parla sempre di microsecondi xD ) che pippo("ciao come va?"); in quanto precedentemente si sono fatte due chiamate a funzione e se all'interno di quella funzione ci sono inizializzazioni e robe di questo genere potrebbero far sprecare più tempo.

Sia ben chiaro però che con cose come 2 echo.. il tempo risparmiato o perso sono livelli impercettibili.
Avatar utente
rockstar86
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 310
Iscrizione: domenica 21 maggio 2006, 14:21
Località: palo alto - california
Contatti:

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da rockstar86 »

(arieccomi a rompere)
continuando a farneticare sulla complessità delle singole operazioni:
unificare le chimate all'echo sicuramente evità più chiamate alla funzione e quindi "velocizza" l'esecuzione dello script da parte del server.
Ma se invece concateno due stringhe? (con il classico ".") la concatenazione è più o meno complessa dell'echo?

in soldoni:
conviene un

Codice: Seleziona tutto

<?php
echo "tu sei";
echo $utente;
?>
oppure:

Codice: Seleziona tutto

<?php
echo "tu sei".$utente;
?>
sono convinto che il "risparmio" sia veramente infimo su queste cose ma se le chiamate sono molte, molti siti su uno stesso server in qualche modo ogni miglioramento può essere importante al risultato finale.
CaesarBlog.com
Veni, Vidi, BlogIT!
Stoned
Prode Principiante
Messaggi: 154
Iscrizione: mercoledì 17 gennaio 2007, 17:38

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da Stoned »

All'inizio, leggendo il tuo messaggio, la prima cosa che mi è venuta in mente è stata "ma perchè questo non si droga come tutte le persone normali??"  (rotfl)
Scherzi a parte, posso rispondere ai tuoi quesiti dicendoti che secondo me il problema che ti stai ponendo non esiste, e ti faccio un esempio pratico: supponiamo il tuo ultimo caso, quello dei due echo o di un echo solo concatenendo due stringhe...
Il problema su quale delle due operazioni (partendo dal presupposto che si tratta di operazioni base) sia "più veloce" è inutile, in quanto la differenza è trascurabile rispetto agli altri tempi di cui vive il server su cui la pagina gira: se (sparo numeri a caso) per fare la prima ci volessere 50 cicli di clock e per fare la seconda ce ne volessero 60, è inutile preoccuparsi dei 10 cicli di differenza se magari, solo per leggere la pagina dall'hd prima di interpretarla il server spreca 5.000 cicli di clock, e ne perde 50 volte tanto aspettando che il database gli restituisca il valore associato alla variabile. Anche moltiplicando per tutte le pagine che ci sono su un server, per tutte le visualizzazioni di una giornata, potrai avere, che ne so, una differenza di un secondo nell'arco di una giornata, differenza che non vale neppure il tempo di scrivere la domanda su questo forum  (rotfl)
Nella pratica, dunque, non è importante (almeno su queste funzioni base) quale delle due sia la più veloce, ma è molto più importante la pulizia del codice che le usa : ad esempio, per come la vedo io, l'usare un'echo con una concatenazione ha più senso logico di usare due echo, perchè nella pratica si tratta di mandare a schermo due cose strettamente legate tra di loro, e l'unirle aumenta la leggibilità del codice...
Stesso discorso per il primo esempio (quello delle porzioni di codice php inserite tra i tag html): non so quale delle due soluzioni sia più efficente, ma usare i tag fuori dal codice php potrebbe portare ad una maggiore leggibilità del codice...immagina che, sulla tua pagina, debba mettere mano un grafico che non sa nulla di php: nel caso di pagine miste tra html e php, potrebbe toccare solo i tag html, senza far caso al codice php (separando così meglio i contenuti dalla presentazione)
Quindi, in finale, i vantaggi che si hanno ottimizzando all'esasperazione l'uso delle funzioni così basilari sono inutili rispetto a quelli di avere un codice più leggibile, di usare query sql più ottimizzate, ecc  (good)
edgy
Prode Principiante
Messaggi: 134
Iscrizione: sabato 28 ottobre 2006, 14:32

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da edgy »

rockstar86 ha scritto: salve a tutti sono di nuovo qui con qualche domanda/curiosità sul php e sono particolarmente interessato ad aspetti tecnici anzi al dilà di queste domande sarei lieto di ricevere link o titoli di testo sui quali approfondire questi aspetti:

Partiamo dal primo quesito.
Capita spesso in pagine php di voler utilizzare componenti tipici dell'html (un per esempio).
in questo caso quale delle due procedure è tecnicamente (e a livello di complessità di esecuzione da parte del broser) migliore?
questa:

Codice: Seleziona tutto

<?php
echo "questo è un div";
?>
<div>
<?php echo "testo nel div";?>
</div>
<?php
...
oppure:

Codice: Seleziona tutto

<?php
echo "questo è un div";
print '<div>';
echo "testo nel div";
print '</div>';
...
sicuramente le deu procedure hanno risultato analogo nella visualizzazione in una pagina ma quello che mi chiedo è: quale delle due è tecnicamente conveniente? quale delle due ha complessità interpretativa minore? quale è di più rapida esecuzione per un browser?
In questo caso la prima versione dovrebbe essere più veloce della prima perchè l'interprete php salta le parti non racchiuse nei tag php e quindi non le processa e non le controlla ma verranno inserite così come sono nella pagina html che verrà inviata al client e quindi il server farà meno lavoro perchè dovrà interpretare meno codice.
Avatar utente
rockstar86
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 310
Iscrizione: domenica 21 maggio 2006, 14:21
Località: palo alto - california
Contatti:

Re: [PHP] entriamo nei dettagli tecnici

Messaggio da rockstar86 »

Stoned ha scritto: All'inizio, leggendo il tuo messaggio, la prima cosa che mi è venuta in mente è stata "ma perchè questo non si droga come tutte le persone normali??"  (rotfl)
....
Il tuo discorso mi è sembravo veramente veramente interessante, effettivamente se consideriamo la complessità della funzione echo come "unitaria" in confronto ai costi spesi per altre funzioni (while, for, ecc...) che hanno sicuramente costo (macchina) maggiore, se mettiamo in cotanta sommatoria anche i costi delle funzioni sql, beh del mio echo non vi è proprio traccia perchè effettivamente il suo costo è trascurabile.
Grazie Stoned per la riflessione.
CaesarBlog.com
Veni, Vidi, BlogIT!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti