Skip to content

rodkot/Snapster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Benchmark Template Engines

Проект для аналитики библиотек шаблонизаторов на JVM языках

ЯП Версия
Java 17
Kotlin 1.8.0
Scala 2.13.16
Clojure 1.12.0

Тестируемые библиотеки

Название Версия Ссылка на GitHub
FreeMarker 2.3.23 🔗 GitHub
Thymeleaf 3.1.0.RELEASE 🔗 GitHub
Pebble 3.2.2 🔗 GitHub
Mustache 0.9.10 🔗 GitHub
Fizzed 2.1.0 🔗 GitHub
Trimou 2.5.0.Final 🔗 GitHub
Velocity 1.7 🔗 GitHub
Liqp 0.9.1.3 🔗 GitHub
HTTL 1.0.11 🔗 GitHub
Jinjava 2.7.4 🔗 GitHub
XDocReport 2.1.0 🔗 GitHub
YARG 2.2.14 🔗 GitHub
JasperReports 6.7.0 🔗 GitHub
Docx-Stamper 2.5.0 🔗 GitHub
BIRT 4.4.1 🔗 GitHub
Handlebars 4.4.0 🔗 GitHub
Barber 2024.01.12.173005-933c241 🔗 GitHub
Scalate 1.10.1 🔗 GitHub
Stencil 0.6.1 🔗 GitHub

Структура проекта

├── /benchmark                          # Модуль нагрузочного тестирования
│   ├── /src
│   │   ├── /main                       # Исходники тестируемых компонентов
│   │   │   ├── /java                   # Библиотеки на JAVA
│   │   │   │   └── ru.sbertech.platformv.print.benchmark.templateengine
│   │   │   ├── /clojure                   # Библиотеки на Clojure
│   │   │   │   └── ru.sbertech.platformv.print.benchmark.clojure.templateengine
│   │   │   ├── /kotlin                 # Библиотеки на Kotlin
│   │   │   │   └── ru.sbertech.platformv.print.benchmark.kotlin
│   │   │   │       ├── /templateengine
│   │   │   │       ├── /mapper
│   │   │   │       └── /model
│   │   │   └── /scala                  # Библиотеки на Scala
│   │   │       └── ru.sbertech.platformv.print.benchmark.scala
│   │   │           ├── /templateengine
│   │   │           ├── /mapper
│   │   │           └── /model
│   │   ├── /test                       # Unit тестирование с использованием StopWatch
│   │   │    └── /java
│   │   │        └── ru.sbertech.platformv.print.benchmark.templateengine
│   │   └── /resources
│   │       ├── /db/changelog           # Миграции БД
│   │       ├── /templates              # Исходники шаблонов
│   │       ├── application.yaml        # Конфигурация ресурсов
│   │       ├── httl.properties
│   │       └── logback.xml             # Настройка Log4J с отключением профилей логирования
│   └── pom.xml                         # Импорт исходников шаблонизаторов
├── /model                              # Модуль предметной модели
│   ├── /src
│   │   ├── /main
│   │   │   └── /java
│   │   │       └── ru.sbertech.platformv.print.benchmark.domain
│   │   │           ├── /configuration
│   │   │           ├── /mapper
│   │   │           ├── /repository
│   │   │           └── /service
│   │   └── /resources                  # Настройка авто-конфигурации
│   │        └── /META-INF
│   │            ├── /spring
│   │            │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │            └── spring.factories
│   └── pom.xml                         # Проект, отвечающий за сборку компонентов Spring приложения
└── pom.xml                             # Корневой проект, содержащий версии используемых языков и библиотек

Описание предметной задачи

Тестовые данные

Тестирование движков происходило условной модели группы компаний с набором офисов.

Для всех движков использовался одинаковый шаблон со структурой:

  • Список компаний
    • Информация о компании
    • Название
    • Директор
    • Центральный офис
    • Инд. код
    • Логотип
    • Список дополнительных офисов
      • Информации о офисе
      • Название
      • Адрес
      • Доступные ресурсы
      • Фотография
      • Список сотрудников офиса
        • Табельный номер
        • Имя
        • Должность
        • Проект
        • Стаж
        • Зарплата

Примеры реализованных шаблонов

Преобразованный шаблон в PDF
ODT шаблон

Результаты тестирования

Характеристика тестирования:

  • Для замера времени использовалась компонент StopWatch из библиотеки Guava
  • В качестве результатов замеров использовалось время выполнения 1000 операций
  • Все шаблоны заранее выгружены из ресурсов (чтоб не учитывать время чтения из памяти)

Тестирование без оптимизаторов

Тестирование без оптимизаторов предполагает, что в замер входит:

  • Создание движка (с отключенным кешированием)
  • Рендер шаблона
@Test
public void benchmarkWithOutOptimizations() throws IOException {
    Stopwatch sw = Stopwatch.createStarted();
    for (int i = 0; i < 1000; i++) {
        var engine = PebbleEngine.of(report, companies);
        engine.process();
    }
    System.out.println(sw.elapsed(TimeUnit.MILLISECONDS) + " ms.");
}

Тестирование с оптимизаторами

Тестирование с оптимизацией предполагает, что в замер входит предварительное создание движка с включенным кешированием и операция рендера.

@Test
public void benchmarkWithOptimizations() throws IOException, TemplateException {
    Stopwatch sw = Stopwatch.createStarted();
    var engine = TrimouEngine.cachingOf(report, companies);
    for (int i = 0; i < 1000; i++) {
        engine.process();
    }
    System.out.println(sw.elapsed(TimeUnit.MILLISECONDS) + " ms.");
}

About

Media accumulation management system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published