Kontekst
Pracując jako niezależny programista, często tworzyłem strony internetowe całkowicie oparte na XSLT. Innymi słowy, na każde żądanie generowany jest plik XML zawierający wszystko, co musimy wiedzieć o zawartości strony: nazwa aktualnie zalogowanego użytkownika, wpisy w górnym menu, jeśli to menu jest dynamiczne / konfigurowalne, tekst do wyświetlać w określonym obszarze strony itp. Następnie przetwarza XSL (pamięci podręczne itp.) na stronę HTML / XHTML, aby wysłać do przeglądarki.
To ma sens, aby ułatwić tworzenie małych stron internetowych, szczególnie w PHP. Jest to rodzaj silnika szablonów, ale ja wolę inne silniki szablonów, ponieważ jest on znacznie bardziej wydajny niż większość silników szablonów, a ponieważ znam go lepiej i podoba mi się. W razie potrzeby można również zapewnić dostęp do surowych danych XML na żądanie w celu zautomatyzowanego dostępu, bez potrzeby tworzenia osobnych interfejsów API.
Oczywiście zawiedzie całkowicie na każdej stronie internetowej na dużą lub dużą skalę, ponieważ nawet przy dobrych technikach buforowania, XSL nadal obniża ogólną wydajność strony i wymaga większej ilości serwerów po stronie procesora.
Pytanie
Nowoczesne przeglądarki mają możliwość pobierania pliku XML i przekształcania go za pomocą powiązanego pliku XSL zadeklarowanego w formacie XML <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 może to zrobić. Internet Explorer 8 też to potrafi.
Oznacza to, że możliwe jest migrowanie przetwarzania XSL z serwera na stronę klienta dla 50% użytkowników (zgodnie ze statystykami przeglądarki na kilku stronach internetowych, na których mogę chcieć to zaimplementować). Oznacza to, że tych 50% użytkowników otrzyma tylko plik XML na każde żądanie, zmniejszając w ten sposób przepustowość ich i serwera (plik XML jest znacznie krótszy niż przetworzony analog HTML) i zmniejszając użycie procesora przez serwer.
Jakie są wady tej techniki?
Myślałem o kilku, ale nie dotyczy to tej sytuacji:
- Trudna implementacja i potrzeba wyboru, na podstawie żądania przeglądarki, kiedy wysłać surowy XML, a kiedy zamiast tego przekształcić go w HTML. Oczywiście system nie będzie o wiele trudniejszy niż rzeczywisty. Jedyną zmianą, którą należy wprowadzić, jest dodanie linku do pliku XSL do każdego pliku XML i dodanie testu przeglądarki.
- Więcej operacji we / wy i przepustowości, ponieważ plik XSLT zostanie pobrany przez przeglądarki, a nie buforowany przez serwer. Nie sądzę, że będzie to problem, ponieważ przeglądarki będą buforować plik XSLT (np. Obrazy, CSS lub pliki JavaScript są buforowane).
- Być może niektóre problemy po stronie klienta, na przykład problemy podczas zapisywania strony w niektórych przeglądarkach.
- Trudność z debugowaniem kodu: nie można uzyskać źródła HTML, którego faktycznie używa przeglądarka, ponieważ jedynym wyświetlanym źródłem jest pobrany plik XML. Z drugiej strony rzadko patrzę na kod HTML po stronie klienta, aw większości przypadków nie można go bezpośrednio używać (usuwa się białe spacje).
ngx_http_xslt_module
czy wszystkich czterech). Bardzo wątpię, aby obsługa XSLT 2.0 po stronie klienta była lepsza.