контекст
Работая в качестве внештатного разработчика, я часто делал сайты полностью на основе XSLT. Другими словами, при каждом запросе создается файл XML, содержащий все, что нам нужно знать о содержимом страницы: имя пользователя, вошедшего в систему в данный момент, элементы верхнего меню, если это меню динамическое / настраиваемое, текст для отображение в определенной области страницы и т. д. Затем XSL обрабатывает (кэши и т. д.) его на странице HTML / XHTML для отправки в браузер.
У него есть хорошая возможность облегчить создание небольших веб-сайтов, особенно с помощью PHP. Это своего рода движок шаблонов, но я предпочитаю другие движки шаблонов, потому что он намного мощнее, чем большинство шаблонизаторов, и потому что я знаю его лучше и мне нравится. Также возможно при необходимости предоставить доступ к необработанным XML-данным по запросу для автоматического доступа без необходимости создания отдельных API.
Конечно, он потерпит неудачу на любом среднем или крупномасштабном веб-сайте, поскольку даже при наличии хороших методов кэширования XSL все же снижает общую производительность веб-сайта и требует больше ресурсов ЦП на стороне сервера.
Вопрос
Современные браузеры имеют возможность взять файл XML и преобразовать его с помощью ассоциированного файла XSL, объявленного в формате XML <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 может это сделать. Internet Explorer 8 тоже может это сделать.
Это означает, что для 50% пользователей возможно перенести обработку XSL с сервера на клиентскую часть (согласно статистике браузера на нескольких веб-сайтах, где я могу захотеть реализовать это). Это означает, что эти 50% пользователей будут получать только XML-файл при каждом запросе, тем самым уменьшая их пропускную способность и пропускную способность сервера (XML-файл намного короче, чем его обработанный аналог HTML), а также уменьшая загрузку ЦП сервера.
Каковы недостатки этой техники?
Я думал о нескольких, но это не относится к этой ситуации:
- Сложная реализация и необходимость выбирать, основываясь на запросе браузера, когда отправлять необработанный XML и когда вместо этого преобразовывать его в HTML. Очевидно, что система будет не намного сложнее, чем фактическая. Единственное изменение - добавить ссылку на файл XSL в каждый XML и добавить проверку браузера.
- Больше ввода-вывода и использования полосы пропускания, поскольку XSLT-файл будет загружаться браузерами, а не кэшироваться сервером. Я не думаю, что это будет проблемой, так как XSLT-файл будет кэшироваться браузерами (например, изображения, CSS или JavaScript-файлы кэшируются).
- Возможно, некоторые проблемы на стороне клиента, например, проблемы с сохранением страницы в некоторых браузерах.
- Трудность отладки кода: невозможно получить исходный HTML-код, который фактически использует браузер, поскольку единственным отображаемым источником является загруженный XML. С другой стороны, я редко обращаюсь к HTML-коду на стороне клиента, и в большинстве случаев его нельзя использовать напрямую (удаляются пробелы).
ngx_http_xslt_module
или всеми четырьмя). Я сильно сомневаюсь, что клиентская поддержка XSLT 2.0 лучше.