内容简介:从 2010 年 12 月 18 日第一个初始版本,到 2012 年 3 月 18 日在 oschina 开源,到今天 2019 年 12 月 18 日,JFinal 已迭代 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 行:
这里的可怕之处在于:这个代码量比市面上拥有同样功能的知名框架组合低两个数量级,更可怕的这是迭代 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 极简设计思想通过视频分享出来:
二、极速这 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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- CatchAdmin v2.4 发布,迭代更新
- IJPay 2.5.2 版本发布,日常迭代
- IJPay 2.7.3 版本发布,日常迭代
- IJPay 2.6.2 版本发布,日常更新迭代
- IJPay 2.7.1 版本发布,日常更新迭代
- JFinal Undertow 1.4 发布,小版本迭代
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design
Eric Evans / Addison-Wesley Professional / 2003-8-30 / USD 74.99
"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is n......一起来看看 《Domain-Driven Design》 这本书的介绍吧!