JFinal 4.8 發佈,迭代 9 年依然極簡、極速

從 2010 年 12 月 18 日第一個初始版本,到 2012 年 3 月 18 日在 oschina 開源,到今天 2019 年 12 月 18 日,JFinal 已迭代 9 年。

任何系統都有向複雜、混亂方向演化的傾向,本質是由於簡潔、有序的結構只擁有極小的概率分佈,而複雜、混亂則擁有極大的概率空間。

但是:jfinal 迭代 9 年依然極簡、極速。

jfinal 不忘初心,對極簡的追求,9 年從未改變。

一、極簡這 9 年

1、 極簡設計

jfinal 迭代 9 年時間,頂層架構從未變過,依然是 Handler、Interceptor、Controller、Render、Plugin,這裡可以找見非常早期的 jfinal 源碼:

https://github.com/jfinal/jfinal/tree/jfinal-1.2/src/com/jfinal

9 年時光,對比現在最新版本 jfinal 4.8,頂層架構沒有增加任何複雜度,沒有降低任何有序性。

2、 極簡實現

jfinal 作為一個應用開發框架,擁有 MVC + AOP + ORM + Template Engine 核心模塊,不依賴於任何第三方,體量僅有 732KB,代碼量不到三萬僅有 29003 行:

JFinal 4.8 發佈,迭代 9 年依然極簡、極速

這裡的可怕之處在於:這個代碼量比市面上擁有同樣功能的知名框架組合低兩個數量級,更可怕的這是迭代 9 年以後的數據。簡潔不足以表述這樣可怕的數據,必須使用極簡。

由於採用極簡設計,jfinal 表達為極度輕量級,上一次新版本專門表述過 jfinal 的輕量級:

https://www.oschina.net/news/107259/jfinal-4-2-released

3、 極簡思想

為什麼 jfinal 9 年的進化,依然可以保持極簡?原因在於 jfinal 擁有一套獨特的極簡設計思想。

jfinal 極簡設計思想來源於數學、物理兩個領域的極致簡潔, 例如數學中極簡的典範,歐拉恆等式:


JFinal 4.8 發佈,迭代 9 年依然極簡、極速

歐拉恆等式將數學上 5 個最重要的常數以最簡約的方式聯繫起來(常量意味著永恆不變,意味著某種深刻)。

其極簡的特徵體現在,歐拉恆等式中極少的要素與極少的關係(要素與關係無法再減少)。

極少要素為: 5 個常量,極少關係為:加法與等於(乘、冪運算本質也是加法運算)。

自然常數 e: 增長的極限,大量自然規律背後依賴的常數。

常數 PI :圓周與直徑的永恆關係。

虛數單位常數 i:將實數軸擴展為複平面,將數從一維擴展至二維。

常數 1: 實數單位長度、最小正整數、比 0 大的排位第 1 的自然數等等。

常數 0: 最小自然數,最小概率、非質非合數、非正非負數、正與負的分界點等等。

歐拉恆等式只用了極少的要素與極少的關係,就將圓、增長極限、自然數、實數、複數、一維、二維等等大自然背後的重要規律深刻聯繫起來。

能否讓 jfinal 開發框架也能像歐拉恆等式一樣,在設計中僅使用極少要素、關係,就能滿足千變萬化的應用開發需求?

jfinal 受此啟發,提煉出極簡設計方法論,值此 jfinal 迭代 9 年之際,jfinal 俱樂部已將 jfinal 極簡設計思想通過視頻分享出來:

https://jfinal.com/club

二、極速這 9 年

1、 極速之於性能

jfinal 總體性能一直數倍領先於傳統開發框架,早在 3.3 版本發佈時已介紹過 jfinal 天下武功唯快不破的強憾性能:

https://www.oschina.net/news/90815/jfinal-3-3

jfinal 的 enjoy 模板引擎的性能更是早已遠超 freemarker、velocity、thymeleaf 這類知名模板引擎:

https://www.oschina.net/news/81225/jfinal-3-0-released

即便如此,但是 jfinal 4.8 仍然不罷手,引入運行時編譯技術再次將性能提升 12.9%,將其它模板引擎甩得更遠,以下是 Intel Core i7 2.2G 機器上的性能測試結果:

JFinal 4.8 發佈,迭代 9 年依然極簡、極速

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

以上測試使用 Java 基準測試框架 JMH,測試源碼:https://gitee.com/jfinal/template-benchmark

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

2、 極速之於開發

早在 spring boot 出生三年之前,jfinal 就使用了嵌入式容器、熱加載、零配置、無 XML、API 引導式配置、ActiveRecord 模式等等方法,用來儘可能提升開發效率。

spring boot 在此三年之後才使用了上述 jfinal 採用的部分方式:https://www.oschina.net/news/90815/jfinal-3-3

今天發佈的 jfinal undertow 2.0 新版本,實現了開發、打包、部署一體化,不必去下載、安裝、配置 tomcat、jetty 這類容器,進一步提升效率節省時間:https://www.oschina.net/p/jfinal-undertow

接下來 jfinal 官方社區將全力打造 app 生態,在應用層面進一步提升開發效率,為開發者帶去更大價值,jfinal 俱樂部正在招募第一批入駐 app,有興趣的同學可以共同參與:https://jfinal.com/my/club

3、 極速之於思想

jfinal 自身:

a:架構極簡給予極速最基本保障

b:使用創新算法猛烈提升性能

c:代碼實現儘可能簡潔、清晰

d:儘可能少地去分配內存。jfinal 模板引擎大量使用該原則提升性能

e:儘可能不使用 Java 反射機制,不得不使用時優先考慮系統啟動時一次性初始化

f:儘可能讓代碼的動作減少,沒有多餘動作

g:熱點代碼重點優化

針對用戶開發體驗的極速更像是一門藝術:

a:儘可能低的學習成本

b:開發過程中儘可能低的認知負擔

c:開發體驗儘可能連續

d:儘可能少的代碼量

三、jfinal 4.8 新功能與改進

毫無疑問,本次 jfinal 4.8 版本,仍然是極簡、極速的繼續表達。

1: 使用運行時編譯技術再次將性能提升 12.9%,開啟方式為: Engine.setFastMode(true);

2:優化 FastStringWriter,使用 char[] 緩衝區,避免內存分配

3: ByteWriter、CharWriter 遞歸中的調用優化為 while 循環

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

jfinal 4.8 擁有 41 項增強與改進,例如新增 slf4j 日誌的官方擴展。 限於篇幅在此不再贅述,感興趣的同學可以來 jfinal.com 官網下載 changelog 文件:jfinal-4.8-changelog.txt

ONE MORE THING:

JFinal 自由開發者聯盟第一批項目正在招募中。為了保障所有上架項目都是極簡設計,俱樂部將整套極簡設計思想錄製成視頻供俱樂部小夥伴們下載學習。JFinal 2020 年的目標就是要幫助俱樂部會員成為自由開發者,為自己寫代碼並獲取可觀的收益:https://jfinal.com/my/club


碼雲地址:https://gitee.com/jfinal/jfinal


分享到:


相關文章: