Усы Скалате против Усы Ява
Мне нужно выбрать движок рендеринга Усов для моего проекта Scala. Похоже, что есть только два варианта: Усы-Ява и Скалате? Есть какие-нибудь сравнения? Какой из них более стабильный / производительный из двух?
5 ответов
Я только что прошел этот же процесс (Усы Скалате или Усы Ява). Я закончил тем, что пошел с Усатый Java, и он работает нормально.
Почему усы Ява? Потому что все, что я хотел, это шаблоны усов. Scalate имеет больше, чем просто эту поддержку, и я не хотел добавлять больше "материала" в мою кодовую базу, а использовал только часть его функциональных возможностей.
Я использовал усы как часть скалатра-скалята. Это единственный разумный выбор для меня, так как я уже инвестировал в Скалатру. Если бы у меня был выбор, я бы тщательно попробовал усы-ява. Двигатели Scalate (все еще?) Несколько причудливы и незрелы.
Несколько примеров, с которыми я столкнулся:
- если вы изменяете разделители по умолчанию {{=<%%>=}}, с этого момента вам придется добавлять пробелы вокруг разделителей, в противном случае парсер захлебнется
- если вы хотите подключить пользовательскую обработку для пропущенных ключей, вы застряли
- иногда рендеринг зависает на несколько минут без видимой причины (это было с Джейд, а не с Усами, но все равно довольно страшно)
Если вы не делаете сложные вещи, усы работают хорошо, но Scalate добавляет некоторые изящные функции, такие как шаблоны по умолчанию и такие, которые могут вам помочь.
Я только что прошел через это испытание, и поскольку я хотел использовать масштабирование, поскольку я использую Scala, я в конечном итоге использовал Mustache-Java по двум причинам:
- Нет тривиального способа загрузить шаблон из
/resources
dir в пути к классам. Это кажется очень простым, и я сбит с толку, почему это недоступно OOB. - Подобно №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