LINUX.ORG.RU

Единый шаблонизатор для клиента (JS) и сервера (JVM)

 dust.js, , , mustache,


1

2

У кого-нибудь есть опыт применения шаблонизаторов, которые могут работать как на клиенте, так и на сервере (в JVM)?

Я смотрел на всякое, пока вот что нашел:

  • Google Closure. Выглядит немного overengineered; последний релиз в 2011; довольно сложный в плане расширения
  • Mustache. Работают везде, но слишком простые. Например нет механизма для добавления функций для всех шаблонов (дату например отформатировать и т.п.), нет возможности вызывать подшаблоны с параметрами
  • Dust.js. Написан на JS, но есть версия которая может работать в Rhino. Язык шаблонов выглядит вполне разумным, но смущает скорость работы на серверной стороне — rhino это таки не V8

может что-то еще есть? или может у кого-нибудь есть мысли по этим пунктам?

★★★★★

Последнее исправление: maxcom (всего исправлений: 5)

Ответ на: комментарий от maxcom

Немного смущают две фразы:

там на серверной стороне V8, а не JVM

смущает скорость работы на серверной стороне — rhino это таки не V8

Т.е. тебя не устраивают ни Rhino, ни V8? 0_o

resurtm ★★★
()
Последнее исправление: resurtm (всего исправлений: 1)
Ответ на: комментарий от resurtm

V8 мне не нравится т.к. я не хочу разводить зоопарк, в проекте в котором все крутится вокруг JVM. А про Rhino сомневаюсь, потому что он медленный и success stories по использованию rhino + js шаблонизатор я пока не видел.

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Эти все чисто серверные (JVM), без реализация на клиенте (JS)

Я так сразу не могу даже придумать зачем JS (в браузере?) шаблонизатор. Я не сразу понял о чём речь, поскольку подумал про свою ситуацию, у меня ядро приложения в отдельной виртуалке, наружу от него сразу API, вебморда просто реализует оставшиеся две буквы VC из MVC. Так вот я подумал про шаблоны в M и на вебморде, но что они должны генерироваться прямо в браузере — не догадался.

Casus ★★★★★
()
Ответ на: комментарий от maxcom

Синтаксис страшненький

Да, блин, это проблема практически всех шаблонизаторов. А что поделать, в один текст приходится встраивать чужеродные элементы. С одной стороны, они должны отличаться от среды, куда встраиваются, чтобы их можно было легко взглядом находить и видеть их логику, с другой стороны, их резкое выделение создаёт ощущение дисгармонии. Хорошего решения нет, вот и получается уже кто с чем смириться может.

Casus ★★★★★
()
Ответ на: комментарий от vorpal

Там вроде на client side только Mustache работает, а с ним и так все ясно, если хорошая java реализация

maxcom ★★★★★
() автор топика
Ответ на: комментарий от aol

говорят, handlebars круче mustache. еще быстрый гуглинг привёл вот это: https://github.com/mwunsch/handlebars.scala

Интересно, но есть два момента. Во-первых опять же нет вызова подшаблонов с параметрами (или я плохо искал?). Во-вторых реализация построенна на reflection, есть подозрение что работать будет не шустро

maxcom ★★★★★
() автор топика
Ответ на: комментарий от aol

хотя да, надо будет и этот вариант внимательнее посмотреть

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

ммм.. надеюсь, правильно тебя понял про параметры..
вобщем, глядя на https://github.com/commondream/handlebars-helpers-examples/blob/master/partia...
кажется мне, что ведь для любого блока потом можно сделать var template = Handlebars.compile($(«#some-template»).html());

и потом привязть туда данные (ты ведь об этом?)
$('#list').html(template(data));

aol ★★★★★
()
Ответ на: комментарий от aol

хочется что-то вроде

  {{#each people}}
    {{> person rel=author mode=short}}
  {{/each}}

т.е. чтобы из шаблона можно было вызвать подшаблон, указав ему параметры которые влияют на его выдачу. При этом не добавляя эти параметры собственно в people

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

https://github.com/neuland/jade4j Но я на жабе не проверял. А в браузере компиленый jade работает без проблем.

Вообще есть 2 основных направления

- logicless (Мусташ, и его развитие типа Hogan / Handlebar)
- с форматированием отступами (HAML и его развитие Jade [v8], Silk [Ruby])

Еще есть «сбоку» всякие XST, которые продвигает яндекс в своем БЕМ, но по-моему оно на небольших проектах черевато полной аннигиляцией мозга.

Ключевые слова вроде дал. Остальное в гугле: [название] template [java/javascript]

PS. Мое мнение, что универсальные шаблоны под разные языки - это дорога в ад. То есть реально дешевле будет привернуть на сервере к жабе v8 чисто под рендеринг. Чтобы и на клиенте и на сервере одно и то же бегало.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Jade выглядит вполне годным. Как там кстати даты выводят, можно как-то свою функцию добавить?

maxcom ★★★★★
() автор топика
Ответ на: комментарий от Vit

впрочем фиг с ним с датами. Выберу Jade

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Нет. И вроде бы он очень тормозной http://axtaxt.wordpress.com/2011/09/25/benchmark-rhino-vs-chrome-v8-on-server...

Дешево и сердито - сделать на ноде отдельный демон, который будет всасывать джейсон и выплевывать HTML. В памяти займет метров 40, течь не будет, падать не станет.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Дешево и сердито - сделать на ноде отдельный демон, который будет всасывать джейсон и выплевывать HTML. В памяти займет метров 40, течь не будет, падать не станет.

Это сильно усложнит поднятие development окружения

maxcom ★★★★★
() автор топика
Ответ на: комментарий от Vit

очень тормозной

да, там по замерам как-то совсем ужасно

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Либо просунуть функцию, вместе с параметрами, либо миксин нарисовать. Миксин будет многократно дублироваться, поэтому ими под такое лучше не пользоваться

Vit ★★★★★
()
Ответ на: комментарий от Vit

я пожалуй даты просто на серверной стороне в String отрисую, и в json засуну два варианта — строку и ISO8601. Дублирование, но зато проще в шаблоне

maxcom ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Они сейчас готовые блобы раздают, уже компилировать незачем. Если действительно надо - все упрётся в запуск несложного скрипта.

Просто если расчитываешь, что у тебя джейд будет и на яваскрипте и на яве бегать... в итоге выйдет боком. Потому что прийдется дублировать хелперы, и не получится втыкать местами куски кода прямо в темплейты.

Еще можно напямую v8 дергать, как mail.ru поступили. Но я такое не пробовал. И это точно надо подет компилять.

Vit ★★★★★
()
Ответ на: комментарий от maxcom

Ну можно и так. Просто в какой-то момент ты войдешь во вкус и захочешь добавить в темплейт совсем чуть-чуть жабаскрипта. И станет тебе на сервере грустно :)

Vit ★★★★★
()
Ответ на: комментарий от maxcom

ну так туда же можно передать что-то, momentjs например, и выводить даты, там же можно любой код писать. жейд говорят тормозной, это да. а у предыдущих потому и синтаксис страшненький, что мол быстрые. лично я жейд использую и там и тут и проблем не имею, хотя у меня и нагрузки нет.

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Momentjs клевая штука, спасибо за наводку

maxcom ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.