Consigli per script PHP più veloci

Scritto il 21 Aprile 2008
Nella categoria Guide, PHP | 1 commento
Tag: , ,

Oggi ho letto il post di antirez su cosa era e invece cosa è importante ora per la programmazione, quando si fa moltissimo scripting in PHP ad esempio, e pochissima “vera” programmazione in C o simili. In particolare è diventato più utile ottimizzare in modo anche “sporco” le righe di codice, piuttosto che sapere qual’è l’algoritmo più efficiente per affrontare un problema, perché questo secondo tipo di codice è molto meno utilizzato oggi, quando spopolano le web-application.

Quindi ho deciso di prendere spunto da tre articoli che trovai tempo fa su come ottimizzare la scrittura di codice PHP, verificare, e spiegarli.

Consigli generici: meno chiamate a funzioni

Sempre, sempre, sempre, fare meno chiamate possibili alle funzioni, questa deve essere una regola generale, sempre meglio tenere in memoria una variabile in più (che poi andrà distrutta con unset). Il classico esempio non è inserire una chiamata all’interno di un ciclo, ma all’esterno oppure dentro la prima clausola di un for

for($a = 0; $a < sizeof($array); $a++)

Questo va malissimo, piuttosto meglio

$max = sizeof($array);
for($a = 0; $a < $max; $a++) {
...
}
unset($max);

Oppure più carino

for($a = 0, $max = sizeof($array); $a < $max; $a++) {
...
}
unset($max);

Consigli generici: ordine nelle condizioni

Quando si controllano più condizioni tra loro è importante farlo nell’ordine giusto e con gli operatori logici giusti.

Ad esempio usando || e && al posto dei semplici | e &, i primi hanno il vantaggio di terminare il controlla appena le condizioni non sono verificabili, quindi se controlliamo che ($var1 && $var2), se già la prima condizione è falsa, non sarà valutata la seconda facendo risparmiare tempo macchina.

Grazie a questo principio, è possibile velocizzare il codice valutando le condizioni nell’ordine giusto, cioè nel caso di una condizione ($var1 || $var2) è preferibile mettere come prima condizione quella che più spesso viene verificata.

Usare funzioni più semplici possibili

PHP mette a disposizione diverse funzioni che fanno a prima vista la stessa cosa, ma in modo diverso; ad esempio per sostituire pezzi di stringhe, ci sono ereg_replace, preg_replace e str_replace ma sono diverse tra loro, in particolare le prime due sfruttano le Espressioni Regolari, mentre la seconda cerca stringe semplici; ovviamente utilizzare quest’ultima rende il codice molto più veloce, di almeno la metà, dipende dalla complessità della RegExp.

Allo stesso modo le funzioni explode è più veloce di split, visto che anch’essa sfrutta le espressioni regolari.

Infine consiglio di utilizzare time() al posto di date('U'), in quanto la mancanza di parametri rende la prima molto più rapida e leggera.

Conta pochissimo invece utilizzare le virgolette singole 'stringa' al posto di quelle doppie "stringa", la differenza, per chi non lo sapesse, è che se una variabile appare tra due virgolette doppie viene sostituita, con le singole no; ma la differenza è talmente minima che non vale la pena di fare salti mortali per controllare tutto il codice, se scappa una virgoletta doppia (magari anche perché vogliamo inserire un codice ascii come \n), è un errore perdonabile.

Consigli che non vale la pena di seguire

Gli articoli che ho citato si perdono purtroppo anche in alcuni consigli un approssimativi o poco approfonditi, che non vale la pena di seguire.

In particolare sembra che utilizzare === al posto di == dia alcuni vantaggi, ma in realtà non è proprio così, solo in alcuni casi. Il secondo operatore infatti controlla prima che i due oggetti siano dello stesso tipo, mentre il primo cerca di converti nello stesso tipo. In particolare:

('22' == 22) è VERO
('22' === 22) è FALSO

Ho verificato che confrontando stringhe uguali, non ci sono miglioramenti sensibili scambiando == con === .

Stesso discorso per le funzioni ctype_digit e is_numeric, che tra loro sono differenti: la prima verifica se in una stringa sono scritte solo cifre, mentre la seconda controlla se un oggetto è di tipo numerico (un int, float, etc) oppure se è una stringa che rappresenta un numero, prendendo quindi per buono il valore "0.12", per cui la ctype_digit restituirebbe falso.

Feed anche per la Star Comics

Scritto il 4 Aprile 2008
Nella categoria Fumetti, PHP, Produzioni Proprie | 1 commento
Tag: , , ,

Grazie ad una amica (Federica) mi sono mosso e oggi ho sistemato finalmente il feed per la Star Comics, casa editrice che ammetto di seguire poco.

Già che c’ero ho migliorato gli altri feed e creato una pagina per tutti i Feed per i fumetti.

Feed Star Comics

Nuovi feed per i fumetti

Scritto il 15 Novembre 2007
Nella categoria Fumetti, PHP, Produzioni Proprie | Scrivi un commento
Tag: , ,

In contemporanea con la riapertura del sito (per ora in sordina), colgo l’occasione per aggiornare i feed, che erano rimasti inattivi per molto tempo, d’ora in avanti l’indirizzo ufficiale si posta su FeedBurner, in modo che qualsiasi cambiamento ci sia al sito, quello sarà sempre valido.

Panini Comics: Marvel Italia
Panini Comics: Panini Comics
Panini Comics: Planet Manga
Sergio Bonelli Editor

Come sempre, per qualsiasi problema, lasciatemi un commento a questo articolo.

Feed Panini aggiornati

Scritto il 10 Settembre 2007
Nella categoria Fumetti, PHP, Produzioni Proprie | Scrivi un commento
Tag: , ,

Ho aggiornato i feed dei fumetti Panini (quindi Panini Comics, Planet Manga e Marvel Italia), c’era un errore che non permetteva di prendere tutti gli albi disponibili, se non c’era la possibilità di acquistare online. Ora dovrebbe essere tutto a posto.

Chiaramente potreste vedere doppio oggi, causa cambio di sistema, ma non preoccupatevi.

Feed per i fumetti nuovi e aggiornati

Scritto il 9 Marzo 2007
Nella categoria PHP | Scrivi un commento

Ho deciso di "spostare" i feed dei fumetti su Feedburner così mi posso fare un’idea dell’utilità del servizio, se c’è qualcuno che lo usa, eccetera, non dovrebbe cambiare molto per voi, se volete cambiare gli indirizzi sono:

Marvel Italia
Panini Comics
Planet Manga
Panini Comics
Sergio Bonelli Editore

Ne ho creati anche altri due, per la Play Press e per la Star Comics, ecco gli indirizzi:

Star Comics
Play Press

Al momento non ho altre fonti, se volete suggeritene ;)

Aggiornamento per i feed Bonelli

Scritto il 24 Febbraio 2007
Nella categoria Fumetti, PHP | Scrivi un commento

Piccolo aggiornamento al feed dei fumetti di casa Sergio Bonelli, in particolare ho aggiunto altre testate a quelle conosciute, nel feed attuale (che corrisponde alla pagina Albi in edicola), c’è un solo numero che risulta come Albo sconosciuto ed è “Il legionario”, ma in quanto one shot non mi sento di aggiungerlo alla lista, che attualmente contiene 32 testate.

Per altri problemi, suggerimenti o idee sui feed dei fumetti, fatemi sapere!

Feed per i fumetti Bonelli

Scritto il 9 Gennaio 2007
Nella categoria Fumetti, PHP | Scrivi un commento

Dopo i feed di ieri pronto anche quello per i fumetti Bonelli

Bonelli

Visto che ho un po’ più di spazio, avverto che questi feed si aggiornano due volte al giorno, per il resto restituiscono solo il contenuto della cache.

Se i feed Panini vi danno problemi, è perché il loro sito fa cagare, non c’è UNA cosa corretta in quella pagina, nessuna lettera accentata scritta giusta, nessuna virgoletta, niente; inoltre il sito ogni tanto restituisce una pagina bianca, e così fa il feed.

Feed per i fumetti Panini

Scritto il 8 Gennaio 2007
Nella categoria Fumetti, PHP | 4 commenti

Come molti geek, sono anche io un appassionato di fumetti, non le leggo tantissimi, ma ho il mio appuntamento fisso con la fumetteria di fiducia. Il problema è sapere quando passare, perché non è che ho tempo per andare tutte le settimane, ma neanche posso aspettare a fine mese per sapere cosa succede nello strabiliante Ultimates.

Quindi mi sono ingegnato e ho “creato” i feed partendo dalla pagina della Panini Comics, ho tralasciato la Panini Video ma li ho fatti per tutti gli altri Leggi il resto