转载

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://www.oschina.net/news/112162/jfinal-4-8-released
正文到此结束
Loading...