Усы Скалате против Усы Ява

Мне нужно выбрать движок рендеринга Усов для моего проекта Scala. Похоже, что есть только два варианта: Усы-Ява и Скалате? Есть какие-нибудь сравнения? Какой из них более стабильный / производительный из двух?

5 ответов

Я только что прошел этот же процесс (Усы Скалате или Усы Ява). Я закончил тем, что пошел с Усатый Java, и он работает нормально.

Почему усы Ява? Потому что все, что я хотел, это шаблоны усов. Scalate имеет больше, чем просто эту поддержку, и я не хотел добавлять больше "материала" в мою кодовую базу, а использовал только часть его функциональных возможностей.

Я использовал усы как часть скалатра-скалята. Это единственный разумный выбор для меня, так как я уже инвестировал в Скалатру. Если бы у меня был выбор, я бы тщательно попробовал усы-ява. Двигатели Scalate (все еще?) Несколько причудливы и незрелы.

Несколько примеров, с которыми я столкнулся:

  • если вы изменяете разделители по умолчанию {{=<%%>=}}, с этого момента вам придется добавлять пробелы вокруг разделителей, в противном случае парсер захлебнется
  • если вы хотите подключить пользовательскую обработку для пропущенных ключей, вы застряли
  • иногда рендеринг зависает на несколько минут без видимой причины (это было с Джейд, а не с Усами, но все равно довольно страшно)

Если вы не делаете сложные вещи, усы работают хорошо, но Scalate добавляет некоторые изящные функции, такие как шаблоны по умолчанию и такие, которые могут вам помочь.

Я только что прошел через это испытание, и поскольку я хотел использовать масштабирование, поскольку я использую Scala, я в конечном итоге использовал Mustache-Java по двум причинам:

  1. Нет тривиального способа загрузить шаблон из /resourcesdir в пути к классам. Это кажется очень простым, и я сбит с толку, почему это недоступно OOB.
  2. Подобно №1, нет тривиального способа загрузить шаблон из простого String. Вам нужно написать собственный загрузчик, если вы хотите это сделать. Почему?

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

Одна вещь, которую я обнаружил, заключается в том, что вам нужно преобразовать данные в карту Java, иначе она не работает (по крайней мере, с Scala 2.12):

      "Mustache test" should "succeed" in {
  import scala.collection.JavaConverters._

  val template = "Hello, {{name}}"
  val mf = new DefaultMustacheFactory()
  val mustache = mf.compile(new StringReader(template), "sample")
  val map = Map("name" -> "Joe")

  val sw = new StringWriter()
  mustache.execute(sw, map.asJava) // if you don't use .asJava here it's not going to work

  assert(sw.toString.contains("Joe"))
}

Преимущество Mustache-Java в том, что Java компилируется очень быстро относительно Scala.

Scalate упрощает рендеринг шаблонов Mustache, и я бы предпочел использовать относительно интуитивно понятную библиотеку Scala, чем библиотеку Java.

Предположим, у вас есть следующие simple_example.mustache шаблон:

      I like {{programming_language}}
The code is {{code_description}}

Вы можете визуализировать шаблон с помощью этого кода:

      import org.fusesource.scalate.TemplateEngine
val sourceDataPath = os.pwd/"simple_example.mustache".toString
val engine = new TemplateEngine
val someAttributes = Map(
  "programming_language" -> "Scala",
  "code_description" -> "pretty"
)
engine.layout(sourceDataPath, someAttributes)

Вот результат:

      I like Scala
The code is pretty
Другие вопросы по тегам