Kontext
Als freiberuflicher Entwickler habe ich oft Websites erstellt, die vollständig auf XSLT basieren. Mit anderen Worten, bei jeder Anforderung wird eine XML-Datei generiert, die alles enthält, was wir über den Seiteninhalt wissen müssen: den Namen des aktuell angemeldeten Benutzers, die obersten Menüeinträge, wenn dieses Menü dynamisch / konfigurierbar ist, den Text zu Anzeige in einem bestimmten Bereich der Seite usw. Anschließend wird sie von XSL-Prozessen (Caches usw.) an HTML / XHTML-Seiten gesendet, um sie an den Browser zu senden.
Es hat einen guten Grund, die Erstellung kleinerer Websites zu vereinfachen, insbesondere mit PHP. Es ist eine Art Template-Engine, die ich aber anderen Template-Engines vorziehe, weil sie viel leistungsfähiger ist als die meisten Template-Engines und weil ich sie besser kenne und mag. Es ist auch möglich, bei Bedarf einen Zugriff auf XML-Rohdaten für einen automatisierten Zugriff bereitzustellen, ohne dass separate APIs erstellt werden müssen.
Natürlich wird es auf jeder mittelgroßen oder großen Website vollständig versagen, da XSL trotz guter Caching-Techniken die Gesamtleistung der Website beeinträchtigt und mehr CPU-Server erfordert.
Frage
Moderne Browser haben die Möglichkeit, eine XML-Datei aufzunehmen und mit einer zugehörigen, in XML deklarierten XSL-Datei zu transformieren <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 kann das. Internet Explorer 8 kann das auch.
Dies bedeutet, dass es für 50% der Benutzer möglich ist, die XSL-Verarbeitung vom Server auf die Clientseite zu migrieren (entsprechend der Browserstatistik auf mehreren Websites, auf denen ich dies möglicherweise implementieren möchte). Dies bedeutet, dass diese 50% der Benutzer bei jeder Anforderung nur die XML-Datei erhalten, wodurch die Bandbreite ihrer Benutzer und des Servers (die XML-Datei ist viel kürzer als das verarbeitete HTML-Analog) und die CPU-Auslastung des Servers verringert werden.
Was sind die Nachteile dieser Technik?
Ich habe über mehrere nachgedacht, aber das trifft in dieser Situation nicht zu:
- Schwierige Implementierung und die Notwendigkeit, basierend auf der Browseranforderung zu entscheiden, wann unformatiertes XML gesendet und stattdessen in HTML umgewandelt werden soll. Offensichtlich wird das System nicht viel schwieriger sein als das eigentliche. Die einzige Änderung, die vorgenommen werden muss, ist das Hinzufügen einer XSL-Dateiverknüpfung zu jeder XML-Datei und das Hinzufügen einer Browserprüfung.
- Mehr IO- und Bandbreitennutzung, da die XSLT-Datei von den Browsern heruntergeladen wird, anstatt vom Server zwischengespeichert zu werden. Ich denke nicht, dass es ein Problem sein wird, da XSLT-Dateien von den Browsern zwischengespeichert werden (wie Bilder oder CSS oder JavaScript-Dateien werden tatsächlich zwischengespeichert).
- Möglicherweise einige Probleme auf der Client-Seite, z. B. Probleme beim Speichern einer Seite in einigen Browsern.
- Schwierigkeiten beim Debuggen von Code: Es ist unmöglich, eine HTML-Quelle zu erhalten, die der Browser tatsächlich verwendet, da die einzige angezeigte Quelle das heruntergeladene XML ist. Auf der anderen Seite schaue ich selten auf HTML-Code auf der Clientseite und in den meisten Fällen ist er direkt unbrauchbar (Leerzeichen werden entfernt).
ngx_http_xslt_module
oder allen vier handelte). Ich bezweifle sehr, dass die clientseitige Unterstützung von XSLT 2.0 besser ist.