Contesto
Lavorando come sviluppatore freelance, ho spesso realizzato siti Web completamente basati su XSLT. In altre parole, su ogni richiesta, viene generato un file XML, contenente tutto ciò che dobbiamo sapere sul contenuto della pagina: il nome dell'utente attualmente connesso, le voci di menu in alto, se questo menu è dinamico / configurabile, il testo in visualizzare in un'area specifica della pagina, ecc. Quindi, l'elaborazione XSL (cache, ecc.) nella pagina HTML / XHTML da inviare al browser.
Ha un buon punto per rendere più semplice la creazione di siti Web su piccola scala, in particolare con PHP. È una sorta di motore modello, ma che preferisco ad altri motori modello perché è molto più potente della maggior parte dei motori modello e perché lo conosco meglio e mi piace. È anche possibile, quando necessario, fornire un accesso a dati XML non elaborati su richiesta per un accesso automatizzato, senza la necessità di creare API separate.
Ovviamente, fallirà completamente su qualsiasi sito Web di medie o grandi dimensioni, poiché, anche con buone tecniche di memorizzazione nella cache, XSL degrada ancora le prestazioni complessive del sito Web e richiede più CPU sul lato server.
Domanda
I browser moderni hanno la capacità di prendere un file XML e trasformarlo con un file XSL associato dichiarato in XML come <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 può farlo. Anche Internet Explorer 8 può farlo.
Ciò significa che è possibile migrare l'elaborazione XSL dal server al lato client per il 50% degli utenti (in base alle statistiche del browser su diversi siti Web in cui è possibile che sia necessario implementarlo). Ciò significa che il 50% degli utenti riceverà solo il file XML ad ogni richiesta, riducendo così la larghezza di banda del proprio e del server (essendo il file XML molto più breve del suo analogo HTML elaborato) e riducendo l'utilizzo della CPU del server.
Quali sono gli svantaggi di questa tecnica?
Ho pensato a diversi, ma non si applica in questa situazione:
- Implementazione difficile e necessità di scegliere, in base alla richiesta del browser, quando inviare XML non elaborato e quando invece trasformarlo in HTML. Ovviamente, il sistema non sarà molto più difficile di quello attuale. L'unica modifica da apportare è l'aggiunta del collegamento al file XSL a ogni XML e l'aggiunta di un controllo del browser.
- Maggiore utilizzo di IO e larghezza di banda, poiché il file XSLT verrà scaricato dai browser, anziché essere memorizzato nella cache dal server. Non penso che sarà un problema, dal momento che il file XSLT verrà memorizzato nella cache dai browser (come immagini, o CSS, oppure i file JavaScript vengono effettivamente memorizzati nella cache).
- Forse alcuni problemi sul lato client, come forse problemi durante il salvataggio di una pagina in alcuni browser.
- Difficoltà nel debug del codice: è impossibile ottenere una fonte HTML che il browser sta effettivamente utilizzando, poiché l'unica fonte visualizzata è l'XML scaricato. D'altra parte, raramente vado a vedere il codice HTML sul lato client e, nella maggior parte dei casi, è direttamente inutilizzabile (lo spazio bianco viene rimosso).
ngx_http_xslt_module
o tutti e quattro). Dubito fortemente che il supporto lato client di XSLT 2.0 sia migliore.