Enjoy 4.8 發布,性能碾壓 Freemarker、Velocity、Thymeleaf

2021-01-08 開源中國

    Enjoy Template Engine 採用獨創的 DKFF (Dynamic Key Feature Forward) 詞法分析算法以及獨創的DLRD (Double Layer Recursive Descent) 語法分析算法,極大減少了代碼量,降低了學習成本,並提升了用戶體驗。

    與以往任何一款 java 模板引擎都有顯著的不同,極簡設計、獨創算法、極爽開發體驗,從根本上重新定義了模板引擎,這裡是首版發布時的盛況,傳送門:JFinal 3.0 發布,重新定義模板引擎

    Enjoy 模板引擎專為 java 開發者打造,所以堅持兩個核心設計理念:一是在模板中可以直接與 java 代碼通暢地交互,二是儘可能沿用 java 語法規則,將學習成本降到極致。

    因此,立即掌握 90% 的用法,只需要記住一句話:JFinal 模板引擎表達式與 Java 是直接打通的。

    本次 Enjoy 4.8 最重要的改進是引入動態編譯技術性能提升 12.9%,性能碾壓 Freemarker、Velocity、Thymeleaf, 以下是 Intel Core i7 2.2G 機器上的性能測試結果:

    Enjoy 的性能是 Thymeleaf 的 9.68 倍,是 Freemarker 的 3 倍,是 Velocity 的 2.86 倍,由於 Freemarker、Velocity、Thymeleafe 不支持 byte 模式,以上僅測試了 char 模式,在 byte 模式下 enjoy 性能將領先更多倍數。

以上測試使用 Java 基準測試框架 JMH,測試源碼:

https://gitee.com/jfinal/template-benchmark

注意:Enjoy 的運行時編譯技術仍然支持動態類型,某些模板引擎在使用 asm/cglib 運行時修改字節碼優化性能以後不再支持動態類型,是得不償失的做法,因為動態類型是現代模板引擎必須的特性

 

Enjoy 4.8 changelog:

1:新增 FastFieldGetter,支持動態類型的前提下性能提升 12.9%

2:添加 Engine.setFastMode(boolean),用於配置極速模式

3:新增 addDirective(.., .., boolean keepLineBlank) 方法,支持指令獨佔一行時保留前後空白字符:與輸出指令 #() 行為一樣

4:#date、#number、#escape 等輸出型指令,配置成 keepLineBlank = true

5:優化注釋對輸出格式的影響,注釋與指令處於同一行時保留行尾的換行字符(注釋處在獨立行時無此問題)

6:優化 FastStringWriter 性能

7:ByteWriter、CharWriter 遞歸優化為 while 循環

8:優化 #escape 指令性能,StringBuilder 字符串拼接改為直接向 Writer 輸出

9:輸出指令 Output 去掉對 Boolean 類型的判斷

10:添加 Engine.removeSharedObject(...) 方法,可配合 addSharedObject(...) 支持動態切換共享對象,適用更多應用場景

11:添加 JdkEncoderFactory 方便配置 Engine.setToJdkEncoderFactory() 支持 utf8mb4 編碼的 emoji 表情

12:改進 Utf8Encoder,在極端情況下碰到無法編碼的字符時,拋異常改為輸出問號,提升用戶體驗

13:EngineConfig.getSharedObjectMap() 改為 public 可見性

14:Template 添加無參 renderToString() 方法

15:添加 NullMethodInfo,簡化代碼提升性能

16:Scope 中的 getGlobal、setGlobal、removeGlobal 支持頂層 data 為 null

17:#set 系列指令放開對於自增、自減表達式的使用限制

 

相關焦點

  • Spring Boot 整合 Thymeleaf
    整合過程2.1 添加 Thymeleaf 依賴2.2 編寫實體類和 Controller2.3 創建 Thymeleaf 模板2.4 測試DOCTYPE html><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8">
  • Thymeleaf 3.0.10 發布,XML/XHTML/HTML5 模板引擎
    Thymeleaf 3.0.10 發布,Thymeleaf 是一個 XML/XHTML/HTML5 模板引擎,可用於 Web 與非 Web 環境中的應用開發。
  • Thymeleaf 3.0.1 發布,HTML 5 模板引擎
    Thymeleaf 3.0.1 發布了,Thymeleaf是一個XML/XHTML/HTML5模板引擎,可用於Web與非Web環境中的應用開發
  • Thymeleaf 3.0.2 發布,HTML 5 模板引擎
    Thymeleaf 3.0.2發布了,Thymeleaf 是一個XML/XHTML/HTML5模板引擎
  • JFinal 4.8 發布,迭代 9 年依然極簡、極速
    3.3 版本發布時已介紹過 jfinal 天下武功唯快不破的強憾性能:      https://www.oschina.net/news/90815/jfinal-3-3    jfinal 的 enjoy 模板引擎的性能更是早已遠超 freemarker、velocity、thymeleaf 這類知名模板引擎:      https://www.oschina.net
  • springboot+jpa+thymeleaf實現信息增刪改查功能
    前端:thymeleaf後端:springboot+jpa資料庫:mysql5.6jdk:1.8及以上open-in-view: false thymeleaf: cache: false prefix: classpath:/templates/ suffix: .html servlet: content-type: text/html mode: HTML5 encoding: UTF-8 resources: chain
  • 細品SpringBoot+Thymeleaf,你會有意外收穫
    前綴為 spring.thymeleaf 的配置和這個類中的屬性綁定。而我們剛剛提到的,Spring Boot 為 Thymeleaf 提供的自動化配置類,則是 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration ,部分源碼如下:@Configuration@EnableConfigurationProperties
  • ThymeLeaf常用屬性及表達式使用
    Springboot是當前市場上最流行的javaWeb框架,它可以滿足將Java工程直接打成jar包就進行運行而不必打成war包,而隨之而來的問題便是不同與之前別的框架使用的jsp頁面,由於jsp本質是一個Servlet實例只有在軟體是以war包方式打包的情況下才能進行解析,所以Springboot使用jsp頁面需要特殊配置,於是Springboot推薦了使用Thymeleaf
  • Thymeleaf 3.0.6 發布,HTML 5 模板引擎
    Thymeleaf 3.0.6 發布,更新內容如下:- Fixed unclosed quote in JavaScript
  • Thymeleaf 3.0.3 發布,HTML5模板引擎
    Thymeleaf 3.0.3 發布了。Thymeleaf是一個XML/XHTML/HTML5模板引擎,可用於Web與非Web環境中的應用開發。
  • Thymeleaf 1.0.0-beta3 發布,HTML5模板引擎
    Thymeleaf
  • BootDo 發布 2.0.0 版本,全面升級到 SpringBoot 2.x
    升級說明:眾多小夥伴希望本碼把bootdo使用的springboot升級到2.x版本,經過幾天的升級和測試可以發布新版本了。
  • FreeMarker 2.3.23 發布,Java 模板引擎
    按照計劃,FreeMarker 2.3.23 版正式發布,在模版和 Java 處理上有很多改動,更新日誌:FTL
  • Enjoy 4.9.02 發布,爽爽這三年
    與以往任何一款 java 模板引擎都有顯著的不同,極簡設計、獨創算法、極爽開發體驗,從根本上重新定義了模板引擎,這裡是首版發布時的盛況,傳送門:JFinal 3.0 發布,重新定義模板引擎    Enjoy 模板引擎專為 java 開發者打造,所以堅持兩個核心設計理念:一是在模板中可以直接與 java 代碼通暢地交互,二是儘可能沿用 java 語法規則,將學習成本降到極致
  • 一個高性能js動畫庫velocity.js簡介
    但要知道jquery動畫性能並不是最優的。因為jquery想要實現的目標太多,動畫性能上就不可避免做出妥協。因此要製作高性能js動畫,可能不得不放棄jquery,轉而使用原生js製作動畫。那有沒有一種js高性能動效庫,既像jquery一樣簡單易用,動畫又高性能?這就是velocity.js動畫庫了。
  • JavaScript 模板引擎 Velocity.js
    velocity.js兼容ie6+,chrome等其他瀏覽器。$ npm info velocityjs version瀏覽器支持兼容ie6+,chrome等其他瀏覽器執行cake命令進行打包velocity.js瀏覽器端腳本:
  • Freemarker 教程(一)-模板開發手冊
    本文不會羅列官網API,只在必要時演示其語法,代碼工程中有課代表整理的 freemarker api 思維導圖,配合此文食用可使功力大增!請到 課代表的 github自取。流程如圖:freemarker-overview.png由於大部分模板開發人員都是用它來生成HTML頁面,所以本文將基於 SpringBoot(2.4.1)+Freemarker(2.3.30)+SpringWeb演示 HTML 頁面的渲染2.最簡單的模板 假設我想要一個簡單頁面用來歡迎當前用戶