从 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