La maggior parte delle tecnologie utilizzate per la creazione di pagine HTML dinamiche si basa sull'uso di specifiche tag che permettono di utilizzare opportuni “pezzetti di codice”, allo scopo di rendere vivo il nostro HTML. Le pagine così modificate, dette template o pagine dinamiche, sono in grado di rispondere in modo personalizzato all'utente a cui vengono servite. Tecnologie di questo tipo diffuse sul mercato sono PHP, JSP e ASP. Tralasciando le differenze di sintassi e tecnologia, le pagine HTML dinamiche presentano molte caratteristiche comuni, tra cui la possibilità di scrivere alcune tag in maniera diversa (per il programmatore) ma equivalente dal punto di vista del risultato finale. A volte questa libertà sintattica nasconde però pericoli che possono costare caro in fase di manutenzione del software. Come primo esempio consideriamo una tecnologie più diffuse: il linguaggio di scripting PHP.

Una delle tag più utilizzate in PHP è quella che si occupa di stampare qualcosa nel documento HTML da servire all'utilizzatore finale:

<?php echo "ciao" ?>

chiaramente l'uso di questa tag diventa più interessante se il contenuto da stampare non è una stringa costante, come sopra, ma una variabile

<?php echo $foo ?>

se assegniamo il valore “ciao” alla variabile $foo, le due righe di codice scritte sopra produrranno entrambe lo stesso risultato, ovvero scriveranno “ciao” nella pagina HTML ritornata al browser. Questa tag può essere scritta anche in modalità abbreviata

<?= echo $foo ?>

 Eccoci giunti al nocciolo della questione. La sintassi abbreviata è nata con le prime versioni di PHP, ma dopo qualche tempo è stata abbandonata in favore della sintassi completa. Le tag abbreviate, ovvero quelle scritte nella forma

<?

anziché

<?php

sono diventate deprecate ma sono tutt'ora supportate. In alcuni casi è possibile abilitarle configurando opportunamente l'application server che si occupa di interpretare il codice PHP. Vediamo un esempio concreto nel caso di Apache, dove è sufficiente editare il file php.ini ed abilitare la direttiva

short_open_tag = On

per far funzionare anche le tag abbreviate. Questa non è però una soluzione affidabile, anzi: può capitare che in locale giri tutto a pannello ma, al momento di passare in produzione, o semplicemente portare online le nuove pagine, ci ritroviamo un sito completamente “rotto”, con un errore brutale e quasi sempre fuorviante. Questo potrebbe capitare se il nostro Apache locale è stato configurato per usare le tag abbreviate, a differenza di quello remoto. Si tratta di uno scenario plausibile e molto comune, dato che spesso le istanze di Apache locale vengono aggiornate solo quando ce lo ricordiamo, mentre quelle “live” seguono il ritmo di ogni release stabile, o quasi. Considerando poi che non sempre si ha accesso ai files di configurazione dell'application server remoto, potrebbe anche capitare di non poter risolvere il problema. In tal caso l'unica soluzione sarebbe quella di sostituire tutte le tag obsolete (abbreviate) con quelle corrette, lavoro sempre noioso e potenzialmente pericoloso.

Anche per la sintassi delle tag utilizzate nelle pagine dinamiche è quindi buona norma applicare la vecchia regola consigliata per i nomi delle variabili: meglio un nome un po' più lungo, ma autoesplicativo e robusto, piuttosto di un nome breve, che fa risparmiare pochi secondi di digitazione rendendo però illeggibile il codice. Nel nostro caso, almeno per quanto riguarda il PHP, potremmo quindi dire: meglio una tag lunga oggi che un lavoro certosino domani. La bontà della scelta è confermata anche dal fatto che l'utilizzo di echo è solitamente più performante del suo corrispettivo abbreviato (ma si parla di differenze infinitesimali).

A questo punto è lecito domandarsi se questa “buona pratica” è generica, ovvero indipendente dalla tecnologia e dal linguaggio scelto per realizzare la pagina dinamica. Consideriamo come secondo esempio il caso corrispondente in JSP, ovvero la tag:

<% out.print(“Hello World”) ; %>

solitamente abbreviata per mezzo dell'expression tag  (1)

<%= “Hello World” %>

In questo caso il discorso è chiaramente diverso. Una pagina JSP viene compilata e trasformata in una servlet prima di essere eseguita, per cui a run-time le due sintassi generano praticamente la stessa servlet, a meno di differenze trascurabili. Anche per quanto riguarda le performance le differenze sono minime, l'unica osservazione degna di nota è che in questo caso la tag abbreviata è ottimizzata nel produrre l'output finale, e in alcuni casi potrebbe risultare leggermente più performante (si parla comunque di poche decine di millisecondi). La differenza principale, in questo caso, è che la gestione delle tag, abbreviate o estese, avviene prima di servire l'output al client. Di conseguenza, fino a che la pagina non verrà nuovamente modificata, il processo di “trasformazione della tag in codice operativo” non viene più chiamato in causa.

In conclusione, i vantaggi o svantaggi delle tag abbreviate dipendono dalla tecnologia di lavoro, e il confronto tra PHP e JSP ci suggerisce che non esistono punti deboli nelle tecnologie disponibili, ma piuttosto punti oscuri. Se la scelta tra tag abbreviate o estese dovesse impattare decine o centinaia di pagine, probabilmente sarebbe bene indagare come di fatto vengono trasformate le nostre tag, per diventare consapevoli di tutti i vantaggi e svantaggi di una scelta.

(1) Ricordarsi sempre che in JSP nelle expression tags non va messo il punto e virgola finale