從 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 行:
這裡的可怕之處在於:這個代碼量比市面上擁有同樣功能的知名框架組合低兩個數量級,更可怕的這是迭代 9 年以後的數據。簡潔不足以表述這樣可怕的數據,必須使用極簡。
由於採用極簡設計,jfinal 表達為極度輕量級,上一次新版本專門表述過 jfinal 的輕量級:
https://www.oschina.net/news/107259/jfinal-4-2-released
3、 極簡思想
為什麼 jfinal 9 年的進化,依然可以保持極簡?原因在於 jfinal 擁有一套獨特的極簡設計思想。
jfinal 極簡設計思想來源於數學、物理兩個領域的極致簡潔, 例如數學中極簡的典範,歐拉恆等式:
歐拉恆等式將數學上 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 模板引擎 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
閱讀更多 達升笑聊IT 的文章