1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiandafu-beetl

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 03.03.2025 16:51 498797c
typora-root-url
../beetl3.0
 ______                 _________  _____     
|_   _ \               |  _   _  ||_   _|    
  | |_) |  .---.  .---.|_/ | | \_|  | |      
  |  __'. / /__\\/ /__\\   | |      | |   _  
 _| |__) || \__.,| \__.,  _| |_    _| |__/ | 
|_______/  '.__.' '.__.' |_____|  |________| 

Быстрый шаблонизатор Beetl3

iBeetl.com © 2010 ~ 2024, популярный шаблонизатор в Китае

Maven Central

Возможности

  • Динамическое создание страниц
  • Статическое создание страниц
  • Генерация кода
  • Прямое создание PDF, Word и других форматов через промежуточный XML формат
  • Создание содержимого для SMS, WeChat и других сервисов
  • Скриптовый движок
  • Правиловый движок

Модули

  • beetl-core: основной модуль
  • beetl-ext: расширяемый модуль
  • beetl-integration: интеграция Beetl с различными новыми фреймворками, включая SpringBoot3
  • beetl-classic-integration: интеграция Beetl с различными фреймворками, такими как SpringBoot2, JFinal, Nutz, Struts и другие
  • beetl-test: тестирование Beetl
  • express-benchmark: сравнение производительности Beetl с другими выражениями
  • template-benchmark: сравнение производительности Beetl с другими шаблонизаторами
  • grammar: лексика и грамматика Beetl
  • antlr-support: поддержка различных версий ANTLR
  • beetl-release: интеграция Beetl-Core, Beetl-Ext и зависимостей ANTLR, поддерживающая JDK8, JDK11 и JDK17
  • antlr-support: поддержка различных версий ANTLR, а также JDK11 и JDK17
  • beeetl-dependency-all: все зависимости собраны в одном flat jar

Maven

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.19.0.RELEASE</version>
</dependency>

Шаблоны

http://ibeetl.com/beetlonline/

1 Определение переменных

Определение переменных и выражений аналогично JavaScript, при этом поддерживаются типы данных.

#: var a = 1, isCheck = false;
#: var<String> list = getString(); // объявление типа
<h1>Привет ${a}</h1>

2 Циклическое вывод

Поддерживает различные конструкции циклов, такие как if, for, while, а также поддерживает elsefor после for.

#: var array = getData();
#: for(var item in array){
<h1>${itemLP.index}:${item}</h1>
#:} elsefor {
<h1>пусто</h1>
#:}

3 Использование своих любимых границ и заполнителей

Например, использование <% и %> вместо #: и перенос строки. Beetl позволяет использовать свои собственные границы и заполнители.

<% var array = [1,2,3];
   for(var k in array){ %>
<h1>#{kLP.index}:#{k}</h1>
<% } %>

4 Вызов методов

${call(1)}
${date(), "yyyy-MM-dd"}

5 Вызов Java методов

Можно вызывать Java методы, которые могут быть безопасно использованы.

${@myList.size()}

6 Поддержка HTML тегов

Поддерживает не только скрипты, но и HTML теги.

<my:tag aa = "1">hello<\my:tag>

<my:setTag attr = "1" var="b,c">${b},${c}<\my:setTag>

7 Include и Layout

Поддерживает различные макеты.

# var page = "/common.html";
#: include(page, {"title": "Управление пользователя"}){}

8 Скрипт и выражения

Можно использовать Beetl как скриптовый движок, который имеет богатые возможности и отличную производительность.

var a = 1;
return a + b;

9 Запрещенные синтаксисы

Можно запретить любой синтаксис, чтобы сделать шаблон проще и чище. Например, можно запретить операторы присваивания или сложные выражения.

# var a = 1; // запрещено
${a}

10 Обход дерева синтаксического анализа

Можно легко получить структуру шаблона через настраиваемый движок. Например, можно получить информацию о том, что шаблон требует внешнего входа a, использует переменные a и c, и вызывает метод date.

#: var c = 1, d = date();
${a}, ${c}

11 Настройка дерева синтаксического анализа

Приложения PaaS требуют ограничения количества отрисовок шаблонов, чтобы избежать зависаний JVM. Например, можно запретить выполнение цикла while более одного раза.

#: while(true){
  <h1>Привет</h1>
#:}

Введение

Beetl 3.0, перенесённый с https://github.com/javamonkey/beetl2.0/

QQ группы для общения: 636321496 (полностью), 219324263 (полностью), 252010126

Официальный сайт: ibeetl.com

Производительность

Количество обработанных запросов в секунду, чем больше score, тем лучше.

  • Производительность шаблонов (по данным template-beanchmark)

Beetl > Enjoy >> Rocker > Freemarker >> Thymeleaf == Velociy

Benchmark              Mode  Cnt       Score       Error  Units
Beetl.benchmark       thrpt    5  109547.863 ± 17161.576  ops/s
BeetlByte.benchmark   thrpt    5  237799.769 ±  5904.514  ops/s
Enjoy.benchmark       thrpt    5   99695.440 ± 14083.595  ops/s
EnjoyByte.benchmark   thrpt    5  223874.001 ±  7265.307  ops/s
Freemarker.benchmark  thrpt    5   41452.634 ± 15917.119  ops/s
Handlebars.benchmark  thrpt    5   40360.198 ± 24345.048  ops/s
Rocker.benchmark      thrpt    5   63657.017 ±  4653.265  ops/s
Thymeleaf.benchmark   thrpt    5    6457.169 ±   272.613  ops/s
Velocity.benchmark    thrpt    5    8024.042 ±  2097.396  ops/s
  • Производительность выражений/правил (по данным express-benchmark)

WastEl >> Liquor >> JfireEL = Spel >> Aviator = Beetl = Magic = Jexl3 >> Mvel = Groovy >> Nashorn

Онлайн отладка и выполнение Beetl скрипта http://ibeetl.com/beetlonline/script.html

Benchmark               Mode  Cnt          Score          Error  Units
Aviator.forExpresss    thrpt    5     501300.085 ±    42824.080  ops/s
Aviator.ifExpresss     thrpt    5    3787821.461 ±   126020.429  ops/s
Aviator.simpleExpress  thrpt    5    3936340.996 ±    73374.389  ops/s
Beetl.forExpresss      thrpt    5    1338770.299 ±    52497.190  ops/s
Beetl.ifExpresss       thrpt    5    4296662.629 ±   144833.816  ops/s
Beetl.reflect          thrpt    5      91948.475 ±    24820.670  ops/s
Beetl.simpleExpress    thrpt    5    3637048.580 ±   208029.652  ops/s
Groovy.forExpresss     thrpt    5     252549.783 ±     4250.116  ops/s
Groovy.ifExpresss      thrpt    5     274622.265 ±     4591.017  ops/s
Groovy.simpleExpress   thrpt    5     265044.153 ±    11326.922  ops/s
Jexl3.forExpresss      thrpt    5     786773.898 ±    10419.682  ops/s
Jexl3.ifExpresss       thrpt    5    4202306.490 ±    30129.805  ops/s
Jexl3.simpleExpress    thrpt    5    3372108.774 ±   215486.204  ops/s
JfireEL.ifExpresss     thrpt    5   32117578.964 ±   527020.236  ops/s
JfireEL.simpleExpress  thrpt    5   24189543.412 ±   368783.395  ops/s
Liquor.forExpresss     thrpt    5  133415280.514 ±  7403665.267  ops/s
Liquor.ifExpresss      thrpt    5  142671515.534 ±  2569369.295  ops/s
Liquor.simpleExpress   thrpt    5  131626067.420 ±  1391417.428  ops/s
Magic.forExpresss      thrpt    5      78293.797 ±     5757.270  ops/s
Magic.ifExpresss       thrpt    5    8289531.268 ±   108521.742  ops/s
Magic.simpleExpress    thrpt    5    5483078.794 ±   102774.920  ops/s
Mvel.forExpresss       thrpt    5      19791.976 ±      913.688  ops/s
Mvel.ifExpresss        thrpt    5     212241.434 ±     4588.556  ops/s
Mvel.simpleExpress     thrpt    5     289372.025 ±     5343.856  ops/s
Spel.ifExpresss        thrpt    5   17001870.991 ±  1104612.166  ops/s
Spel.simpleExpress     thrpt    5   16854500.373 ±  1020142.253  ops/s
WastEl.forExpresss     thrpt    5  539086848.932 ± 16033762.932  ops/s
WastEl.ifExpresss      thrpt    5  553963092.029 ±  8708085.274  ops/s
WastEl.simpleExpress   thrpt    5  493929991.021 ±  7826211.390  ops/s

Основные функцииДокументация официального сайта: https://www.kancloud.cn/xiandafu/beetl3_guide

Основные функции Beetl 3
Часть 1. Основные функции
1.1 Установка
1.2 Быстрый старт
1.3 Базовая конфигурация шаблонов
1.4 Загрузчики шаблонов
1.5 Границы и заполнители
1.6 Комментарии
1.7 Определение переменных
1.8 Атрибуты
1.9 Математические выражения
1.10 Циклы
1.11 Условия
1.12 Исключения
1.13 Виртуальные атрибуты
1.14 Вызовы функций
1.15 Безопасное выведение (важно)
1.16 Форматирование вывода
1.17 Теги
1.18 Вызовы методов и атрибутов Java
1.19 Строгий MVC контроль
1.20 Инструкции
1.21 Обработка ошибок
1.22 Мелкие утилиты Beetl
1.23 Escape
Часть 2. Расширенные функции
2.1 Конфигурация GroupTemplate
2.2 Самостоятельное определение методов
2.3 Самостоятельное определение функций форматирования
2.4 Самостоятельное определение тегов
2.5 Самостоятельное определение виртуальных атрибутов
2.6 Использование дополнительных загрузчиков ресурсов
2.7 Самостоятельное определение загрузчиков ресурсов
2.8 Использование CompositeResourceLoader
2.9 Самостоятельное определение обработчиков ошибок
2.10 Самостоятельное определение менеджеров безопасности
2.11 Регистрация глобальных переменных
2.12 Самостоятельное определение макетов
2.13 Оптимизация производительности
2.14 Самостоятельное определение вывода
2.15 Самостоятельное определение шаблонизатора
2.16 Непосредственное выполнение Beetl скриптов
2.17 Валидация шаблонов
Часть 3. Интеграция веб-приложений
3.1 Глобальные переменные веб-приложений
3.2 Интеграционные руководства построения
3.3 Интеграция Servlet
3.4 Интеграция SpringMVC
3.5 Интеграция Spring Boot
3.6 Интеграция Jodd
3.7 Интеграция JFinal4
3.8 Интеграция Nutz
3.9 Интеграция Struts2
3.10 Интеграция AJAX частичного рендера
3.11 Отображение сообщений об ошибках на страницах

Особые функции

  • Синтаксис, являющийся подмножеством JavaScript, очень простой для изучения
  • Возможность настройки границ и заполнителей шаблонов
  • Возможность расширения шаблонизатора для реализации продвинутых функций
  • Возможность изменения дерева синтаксического анализа для реализации продвинутых функций
  • Поддержка символьного и байтового вывода, обеспечивающего высокую производительность веб-рендеринга
  • Высокая производительность исполнения, предоставляющая специальные синтаксисы, такие как for {} elsefor {}, безопасное выведение, сокращенный тернарный оператор и другие
  • Поддержка HTML/XML тегов
  • Ядро является скриптовым движком, который может использоваться не только для шаблонов, но и для выражений и правил.

Поддержка

Любая компания или человек может бесплатно использовать Beetl и получать бесплатную техническую поддержку от сообщества, форума, QQ группы и автора. Для получения платной технической поддержки, пожалуйста, свяжитесь с нами через WeChat (lliijjzz), указав "платная техническая поддержка".

  • Любая компания, которая объявила о применении рабочего режима "996", будет взимать годовой сбор в размере 7996 юаней
  • Для получения коммерческой технической поддержки, такой как обучение, консультации, кастомизация, послепродажное обслуживание и т.д., стоимость зависит от размера компании и составляет от 1000 до 10000 юаней в год

Как внести свой вклад

При внесении своего вклада в проект, пожалуйста, следуйте нижеуказанным базовым нормам:

  • Каждая строка кода должна содержать не более 120 равномерных символов
  • Каждому классу (Class), полю (Field) и методу (Method) следует добавлять javadoc комментарии (@Override методы могут не иметь комментариев)
  • Необходимо использовать фигурные скобки после if и while
  • Не следует использовать табуляцию, заменив её четырьмя пробелами

Пример норм комментариев

/*
版权声明部分
*/

package org.beetl.core.cache;

import java.util.function.Function;

/**
 * Кэш стандартного интерфейса, каждый метод должен быть поточно-безопасным
 *
 * @author xiandafu
 * @since 2020-09-21
 */
public interface Cache {

    /** Лог TAG */
    String TAG = "Cache";

    /**
     * Получает значение по ключу из кэша
     *
     * @param key Ключ, может быть null
     * @return Значение, соответствующее ключу, может быть null
     */
    Object get(Object key);

    /**
     * Получает значение по ключу из кэша; если значение равно null, то выполняется {@code function#apply},
     * результат которого добавляется в кэш и возвращается
     *
     * @param key      Ключ, может быть null
     * @param function Функция, которая будет выполнена, если значение по ключу равно null
     * @return Результат выполнения {@code function#apply}, добавленный в кэш
     */
    Object get(Object key, Function<Object, Object> function);
}

Пример git коммита

# git commit информация должна содержать [версию] + [модуль] + [информацию]
# Например, текущая версия org.beetl.express.Beetl — это 3.2.0,
# и изменение относится к "комментариям узлов дерева",
# тогда коммит информации будет таким: 
git commit -m '【Sprint3.3.0】【org.beetl.express.Beetl】комментарии узлов дерева'

Развитие Beetl невозможно без помощи следующих людей (порядок не важен):

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xiandafu-beetl.git
git@api.gitlife.ru:oschina-mirror/xiandafu-beetl.git
oschina-mirror
xiandafu-beetl
xiandafu-beetl
master