Контекст
Працюючи позаштатним розробником, я часто робив веб-сайти повністю на основі 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 теж може це зробити.
Це означає, що можна перемістити обробку XSL з сервера на клієнтську частину для 50% користувачів (згідно зі статистикою браузера на кількох веб-сайтах, де я, можливо, захочу це впровадити). Це означає, що ті 50% користувачів отримуватимуть лише XML-файл при кожному запиті, таким чином зменшуючи пропускну здатність їх та сервера (файл XML значно коротший, ніж оброблений аналог HTML), і зменшуючи використання CPU сервера.
Які недоліки цієї техніки?
Я подумав про декілька, але це не стосується цієї ситуації:
- Складна реалізація та необхідність вибору, виходячи із запиту браузера, коли надсилати необроблений XML і коли замість цього перетворювати його в HTML. Очевидно, що система не буде набагато складнішою, ніж реальна. Єдина зміна, яку слід внести, - це додати посилання на файл XSL до кожного XML та додати перевірку браузера.
- Більше використання IO та пропускної здатності, оскільки файл XSLT завантажуватиметься браузерами, а не кешується сервером. Я не думаю, що це буде проблемою, оскільки файл XSLT буде кешований браузерами (як, наприклад, зображення, або CSS, або файли JavaScript).
- Можливо, деякі проблеми на стороні клієнта, як, можливо, проблеми при збереженні сторінки в деяких браузерах.
- Складність відладки коду: неможливо отримати джерело HTML, який браузер фактично використовує, оскільки єдиним відображуваним джерелом є завантажений XML. З іншого боку, я рідко переглядаю HTML-код на стороні клієнта, і в більшості випадків він є непридатним безпосередньо (видаляється пробіл).
ngx_http_xslt_module
або всіма чотирма). Я дуже сумніваюся, що підтримка XSLT 2.0 на стороні клієнта краще.