Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-03-05

Yate

Yet Another Template Engine.

Есть мнение, что нынешние веб-фреймворки, вроде RoR и Django, которые MVC (Model, View, Controller), это хорошо и даже круто. А еще есть мнение, что скоро из MVC на клиента (в браузер) переберется View и даже, может быть, местами — Controller. Ибо зачем напрягать сервер, для которого и так работа найдется, рендерингом веб-страниц? Пусть рендерингом занимаются браузеры, утилизируя невероятную вычислительную мощу нынешних и будущих десктопов/терминалов.

Чтобы быть готовым к такому повороту, подумайте — как убрать работу с шаблонами с сервера. На сервере должна остаться только генерация пакетов данных в формате JSON.

Некоторые уже подумали, причем раньше других:

в Яндекс.Почте появился новый интерфейс, в котором используется шаблонизация данных в браузере. Немногие крупные сервисы отваживались на это, но мы и сейчас считаем такое решение наиболее удачным. Оно не только ускорило работу интерфейса, но и позволяет экономить трафик пользователя и эффективнее расходовать процессорное время серверов.
Недавно мы перевели всю Почту на JS-шаблонизатор и JSON-данные.
Почти сразу стало очевидно, что императивные шаблонизаторы (handlebars, jade, dust) не могут сравниться по удобству разработки с декларативными, их код превращался в «кашу», в которой всё сложнее было разбираться. К тому же мы привыкли к гибкости XSL и сильному разграничению данных и логики отображения, поэтому нам было удобнее работать с шаблонизаторами похожей семантики.

Таким образом, в финале оказались yate и ajaxslt. Но, несмотря на все старания наших разработчиков, ajaxslt не смог приблизиться к производительности yate
Yate — проект, созданный и развиваемый фронтэнд-архитектором Почты. Этот шаблонизатор уже успешно зарекомендовал себя на нескольких готовых, но ещё не представленных проектах Яндекса. Yate очень похож на XSL: при более лёгком и js-подобном синтаксисе в нём используются те же парадигмы (match, apply), поддерживаются предикаты, а также есть jpath — аналог XPath для навигации по JSON. Шаблоны компилируются в обычный javascript и использовать их можно как на клиенте, так и на сервере.

Вот так выглядит один и тот же шаблон на XSL и на yate:



И нам пора выносить V на клиента.


original post http://vasnake.blogspot.com/2014/02/yate.html

6 комментариев:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Интересно, а как у YATE c xslt-функцией document(), т.е. как брать нужные json. Покапался в документации и не нашел ничего. На входе подается один единственный json? Подгрузка не предполагается?? Тогда это слабое место.

    ОтветитьУдалить
    Ответы
    1. Это не бага, это фича :)
      По любому, я бы не стал рекомендовать YATE к использованию вне Яндекса. Это их внутренний продукт, для их внутренних целей. Они так привыкли, им так удобно.
      Все остальные активно юзают всякие ангуляры с редуксами и т.д. и т.п.

      Удалить
    2. Да, по видимому рассчитывать на Yate не стоит. Яндекс-почта - это круто, но походу ее специфическими потребностями все и ограничилось. Но это же жесть...
      В плане обеспечения декларативного языка вполне устраивает XSLT (особенно в союзе с EXSL), но только не в плане XML-нотации. Последняя не только убивает избыточностью, но и просто стремительно устаревает. Показательна кухня весьма консервативного semantic-web. Десять лет они карпели над моделью данных RDF в xml-окружении, но вот уже и там новый фаворит - JSON-LD. Это та же RDF, но без XML. ...Через какое-то время о XML просто будет стыдно говорить. И фиг бы с ним, но нужна замена XSLТ. Вместе с водой выливается и мальчик! )

      Удалить
    3. Как показывает практика (http://stackoverflow.com/questions/1618038/xslt-equivalent-for-json), связка JSON + Javascript закрывает все потребности.

      Как в старом анекдоте: почему у вас черную икру не продают -- спроса нет, никто не спрашивает.

      Удалить
  3. Вероятно это так для сильных кодеров, но для таких как я удивительная доступность XSLT (при сохранении полезности для бизнеса) слишком важна.

    Спасибо за ссылку. Вариантов оказывается много. Оформились даже группы:
    1. "Есть аналог". Примеры: Yate, XJST, JSLT, DefiantJS, JSON-Transforms. Увы, все слабы.
    2. "Аналога нет, но можно на ходу преобразовать json в xml". Не вариант.
    3. "Аналога нет, но есть частичная его заменена". Примеры: tempo, jsonT и масса других. Не то.
    4. "Лучший аналог - JavaScript, т.к. он у него все для этого есть". Да, но сложно.
    5. "Аналог не нужен, т.к. XSLT в версии 3 умеет работать с json". Да, но у xsl-процессоров и с второй-то версией проблемы.

    Походу отказываться от XML/XSLT рано. Другое дело, что NoSQL-СУБД должна в основном оперировать JSON, а ответы на запросы выдавать по разному и в том числе в XML. Это правда, ставит преграду перемещения бизнес-кода на сторону браузера. ...Что наверное хорошо с точки зрения MVC.

    ОтветитьУдалить

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)