Beetl开源过程中那些事

原创
2014/08/26 10:18
阅读数 1.3W

    

   

   我是Beetl的开源作者,叫李家智,网名是闲.大赋。可能很多人更熟悉这个名字,我本意是希望自己又有钱,又很闲,结果事与愿违,尤其是Beetl使用的人多后,又忙又穷了,也许该改名字叫穷.又忙 :)

   做什么事情都需要贵人提携,开源也一样,我就碰到了俩个贵人,一个是HP公司,在做移动总部的好几个项目,客户和HP老板安排事情非常合理谨慎,所以空闲时间挺多的,10点到客户那,6点就下班回家,期间还玩玩各种游戏,一点都不忙。但秋季的有一天我觉悟了,不能这么过下去,得给自己留点什么,闲着闲着就琢磨学习一下技术,选了一个看似高大尚的技术--开发一门语言,也就是现在你们知道的Beetl模板语言。我其实挺后悔这个决定的,当时应该搞搞NOSQL,分布式什么的(后来花了一周搞了一个分布式协作的facade技术,确实带了些好处,这是后话了),或者搞个开源商城什么的的也好拿来卖钱,因为搞语言确实不怎么流行了--尽管难度挺大的。 另外一个贵人就是beetl初期使用者,当我做好0.5版本后,就一直放着,也没有人使用,我也没有意愿推广,有一天,一哥们给我发邮件,说beetl很不错,想用一下。我顿时兴奋了,激起了我再接着开发完善的热情,虽然当时从HP出来去了某有态度公司技术部,但仍然废寝忘食的完善Beetl,这哥们后来所有的项目都是用Beetl做的,我也很感谢他,没有他第一个使用,Beetl很难发展

  搞了一门语言,国内用的项目还挺多,是不是我变得高大威猛了,我猜到开头,但结局并不是这样。因为需要花很多时间。每天技术支持+开发 需要1,2个小时,周末或者小长假什么的,还得闭关。这闭关自古都有讲究,不吃饭,去一个安静的山洞里。现在beetl闭关也类似,吃很少的东西以免犯困, 迫使大脑亢奋。另外清净地方不好找,还好北京高校多,就去北京交大研究生教学楼大教室,那里偶尔有些情侣外,少有学习者。 总之,技术开发beetl,花了很多业余时间,导致个人技术全面落后,jdk7,8,9 都没有跟进,还有hadoop,spark没有什么概念,很火的手机移动开发也掌握不精通。有时候自己想,要是当初不写beetl,现在肯定是高精尖人才了。事实也确实这样,以前一些技术很普通同事,稍微研究了一下这俩类很火的技术,立刻身价倍增,成为各大公司枪手的人才,成天给我哀叹如何拒绝其他公司的offer,好让人羡慕

  再说一下开源中的竞争吧,模板语言是个大众技术,算不上高大上,所以竞争非常激烈。

  Freemarker: 这是我的最大竞争对手,开源有10多年了,在国内外非常流行,尤其是国内拥有很多粉丝,每天有数百个下载。如果你百度一下Freemaker,能看到数不清的介绍文章。我很想代替它,因为零零碎碎用过好几个项目,总觉得别扭。Beetl的优势是语法上更容易上手,使用习俗跟程序员思路接近。还有个不算优势的优势是功能赶得上Freemaker(相对于其他模板引擎来说 ,哈哈)。

  Velocity: apache的,国内使用者也很多。Beetl的优势是属于脚本语言。因此能优雅的处理复杂的渲染逻辑。最早使用Velocity的时候,记得它有个特性就是如果某变量属性不存在,将在页面中显示出来该属性而不是报错。当时看到这个就对velocity不感冒了,试想一下,如果系统重构,导致属性名更改或者不存在,页面都不会报错。这是很不友好的。不知道现在有改进没有

  HTTL,JetbrickTemplate,TinyTemplate, 都是国产的类似Veclotiy的模板引擎,改良了很多velocity不足的地方。JT 以前帮助过HTTL开发,后来基于antlr4自己又开发了一套。TT模仿了JT,也按照自己的理念做了些改进。他们作为国内的开源模板引擎,同样是后起之秀,Beetl优势不大。唯一的优势就是能持续开发和改进,以及Beetl未来的技术野心,包括IDE集成支持(语法着色,属性提示,史无前例的重构支持和debug支持)等

 Webit,BSL.  同Beetl一样,类似JS语法,俩位作者都在自己独立开发前给Beetl提了很多建议。后来对模板引擎的功能和实现方式有自己的想法,就自己开发了一个。我原本认为这俩个都是Beetl未来最大的竞争对手,但现在看来不是,因为BSL现在不维护了,我知道其作者能力很强,兴趣广泛,现在在做其他的技术。Webit则是野心很大,想把Webit做成一个java版本的PHP,因此跟Beetl完全不是一个东西,也无从竞争。总的来说,国内模板引擎竞争氛围很好,有好想法会交流,也不互相拆台。

  angularjs, 很火的JS框架,还有其他富客户端框架爱等,他们跟java模板引擎有很多功能重叠。不过我不担心未来会代替模板引擎。主要是因为js语言技术本身就有缺陷,不适合大规模程序。其次是用js构成的页面不适合SEO,在如火如荼的电商环境下,根本不合适,还有一个问题就是一个页面有过多的页面ajax请求,会成倍的增加服务器负载,这到http2.0流行前,其实是个不合理的设计(当然,对于企业应用来说,用户量小,可以这么搞)。

  Node.JS:有些架构师已经把Node.js作为一个视图技术,原因是想让前端工程师专注前端开发,这点与Beetl不某而合,Beetl也是JS语法。也考虑到让前端工程师专注界面并提供配套的工具和框架来完成这一点(参考我的CrossMVC) .我个人直觉上认为Node.js并不比Beetl更适合做前端渲染,道理很简单,因为Beetl从出生之日就是为了这个目的,而Node.js不是这样初衷。另外,还是对JS说的那句话,JS语言不适合大规模的程序开发,他的异步编程模型更不适合大规模程序开发。Node.JS强大容易导致滥用。也许现在,在让js前端人员开发模板到底使用Beetl+CrossMVC,还是采用Node.JS,很难判断,但时间会证明采用Beetl是对项目一个正确的选择。

   再讨论一下如何推广开源吧。我认识的开源作者并不是为了钱和名而去做开源。目的很纯粹,就是为了兴趣。但是如果自己做的开源并没有使用者,也许就让开愿者失望了,如何推广开源呢,我觉得有点心得体会

   第一:农村包围城市策略。你的开源也许比别人的先进,但作为后来者,很难一时被其他人接受。尽管我们希望有BAT这样的领头羊公司使用是最好的,但刚开始推广的时候不应该做次奢望。最好从一些小公司,个人用户开始做起,然后慢慢推广到中型公式,大型公司。Beetl最初使用者是个人用户,经过3年发展现在已经有B,A 领头羊公司在使用了。

  第二:要有噱头。想让其他人记住你,必须有噱头。这点跟炒作明星没有什么区别,对于开源来说。有些现成的噱头可以使用,比如,体积最小的开源模板引擎,我见过一个开源模板引擎仅仅200行,尽管我不屑于此,但确实给我留下了深刻映像。 再比如,性能最好的模板引擎,这个在当今软件行业似乎是更好的噱头,Beetl期初并不太在意性能,但后期发现此噱头确实是开发者喜欢的一个因素。因此在1.x后期,2.0版本做了很多性能改进,现在EBM测试 是Freemarker性能4倍多。很多最初的开发多是因为这个原因选择试用beetl

  第三: 要有完善的售后支持。重视任何使用者,视他们为客户。如果他们认为文档不够详细,应该尝试去完善文档,如果他们认为缺少例子,那就应该提供更多的例子。如果他们认为Freemaker有的功能,Beetl也应该具有,那就去完成。老实讲,Beetl初期功能都是自己设计完成的的,但是到了后期,很多特性都是使用者推动的,他们不仅仅是Beetl客户,而且也是Beetl实际的推动者。

  第四:拥有一颗淡定的心,在推广过程中,会遭遇各种质疑和拒绝,甚至是打击。我一直宣称要代替Freemaker,从而遭受到很多Freemaker粉丝的打击。我自己公司的项目,Freemarker已经有过技术生态圈,我也难以说服其他人使用Beetl,自己不得不一边恶心,一边用Freemarker继续完成自己的工作。

   最后,我想说说开源Beetl这几年得失吧。

   如前面说的,开源Beetl,这是公司外的一个项目,花去了我业余很多时间,有时候上班也不得不去做一些支持,和Bug的修补。这在HP,还说的过去,但去了有态度公司后,就极大的影响了我工作,我从一个干事麻利的人,变成工作上一个“磨叽”的程序员。我自己也很难接受我这样状态就很快辞职了。后来的创业我也受到这样影响,因此,从事业上来说,做Beetl并没有得到任何利益。我有时候想,如果用这些时间干任何一件其他事情,都或许比这个更值得。Beetl只是我现在一个不得不继续做的事情。我想,这也是很多同样中国的开源作者的想法吧

  然而,Beetl的开发开始实现了我的初衷,代替难用的Freemaker,同时熟悉一门我不熟悉的技术(语言开发)。还有就是,通过Beetl开源,认识了很多朋友。每天跟这些朋友聊天,打逗逗,很有意思,又长了见识。有时候一些人会写信给我,说Beetl帮助他顺利完成了项目开发,或者帮助他找到了工作的时候,每当想到这些我认为开发Beetl是一个正确的决定和一件值得坚持的事情。


  


  

   



展开阅读全文
打赏
41
73 收藏
分享
加载中
哈哈 我时freemarker死忠 不过也是因为15年的元旦 无聊看了看freemarker的官方文档,然后接了个给联想培训freemarker的私活 后面又写了个cms对freemarker深入使用了一下
freemarker的错误提示是在我遇到的所有技术产品中最优秀的
功能强大的完全可以称为一门新的语言,却又死守模板引擎的原则,不做危险的事情
至于性能 不能只在意demo压测性能 还得考虑大规模使用后性能是否也大规模滑坡 很明显freemarker是经过考验的 而且绝大部分场景下 它不会是性能瓶颈所在
语法其实也还好 我觉得一个新人学习freemarker到高手级别 最多需要3天 因为元旦假期只有3天 我也只真正学了3天
不过beetl也很厉害,尤其在引擎中处理的是二进制数据 这个给人耳目一新的感觉 是经过思考 研究 充满原创解决方案的产品 值得敬重 只是一直还放不下freemarker静下心学习
很多人不放心国产软件 确实是因为有些聪明的人太聪明用一个replaceAll方法 也号称自己实现了一个引擎 让一些新人欢呼崇拜
03/28 19:06
回复
举报
闲大赋博主
多谢夸奖,freemaker是我最早用的,大概03年就用了吧。确实是经典的模板引擎。 不过跟beetl设计思路不太一样。 关于错误提示,我不清楚freemarker现在是什么样子,我可以列举一下beetl 1) 如果使用include方式,模板嵌套模板,beetl会打印调用栈,也就是模板调用层次,类似java的异常栈。比如你的一个common模板出错,我记得freemaker只能报common错,但不能报是哪个模板调用common模板出错的。 2) Beetl中文提示为主,甚至有些符号如果是中文,比如“ ;中文全角这种,那么Beetl也能提示出来,”用了中文或者全角符号“ 3) 如果在beetl中,重复定义变量,beetl会报出与哪一行的变量重复定义,方便快速修改 4)Beetl采用了Antlr,因此,如果是语法错误,会提示你缺少什么符号,比如方法调用缺少括号等,这得益于antlr语法解析 5)如果在模板调用debug函数,会输出debug的变量名以及内容,以及调用debug的所在模板文件和行数,方便调试。在以前我使用jsp的时候,为了调试,不得不输出很多东西。beetl的debug把所有必要的信息都输出来 Beetl内部是个脚本语言,因此在语法和错误提示上,像脚本语言靠 关于大规模应用,这个可以有https://gitee.com/xiandafu/template-benchmark ,一个JMH工程来验证,百度,阿里,京东等大公司也在使用,比如三周前,jd的某个部门采用他作为规则引擎,还有个游戏公司也采用他作为脚本引擎,他们都做个自己的性能测试
03/28 22:02
回复
举报
作者绝对是 OG,skr
2018/07/31 10:51
回复
举报
有多少人是和我一样是看了《SpringBoot2精髓 》这本书的作者,进而看到了这里的 ,牛逼了我的哥!
2018/02/06 17:45
回复
举报
感谢大赋的分享, 从你那里我也学到并印证了不少东西. "就是为了兴趣" 这句话大赞, 为了兴趣去做自己热爱的事情就是一种幸福!
2017/08/22 07:52
回复
举报

引用来自“乌龟壳”的评论

老话重提,既然你都知道js不适合大规模开发,为什么还要以js为蓝本做一个动态语言的模板引擎?我觉得以jsp为蓝本才是java模板引擎该有的样子。

引用来自“闲大赋”的评论

JS是不适合大规模,但你这个逻辑有点神奇?模板里面你认为会有大规模Beetl片段吗?那还叫模板,想想模板定义再说吧
你提JSP,有点搞笑了,你能说出几个JSP不方便地方吗?要是你说不用出,证明你对前端模板一无所知,要是你说出来了,Beetl就有可能解决了你的问题

要是JSP真好,那还搞什么JSTL,你怎么理解JSTL出现的原因?
什么叫大规模?比如一百万行java代码,其中模板引擎只有一行,但是引用了其中某个class的某个实例的属性,这个属性可以跟着这一百万行java代码一起被良好地跟踪(比如重构),这就是大规模,而不是模板本身用了多少行代码。

我说的是以jsp为蓝本去优化设计做一个静态类型可以和java代码一起被良好处理的模板语言,而不是拿着jsp直接用,jsp确实不够好
2017/08/21 18:47
回复
举报
闲大赋博主

引用来自“乌龟壳”的评论

老话重提,既然你都知道js不适合大规模开发,为什么还要以js为蓝本做一个动态语言的模板引擎?我觉得以jsp为蓝本才是java模板引擎该有的样子。
JS是不适合大规模,但你这个逻辑有点神奇?模板里面你认为会有大规模Beetl片段吗?那还叫模板,想想模板定义再说吧
你提JSP,有点搞笑了,你能说出几个JSP不方便地方吗?要是你说不用出,证明你对前端模板一无所知,要是你说出来了,Beetl就有可能解决了你的问题

要是JSP真好,那还搞什么JSTL,你怎么理解JSTL出现的原因?
2017/08/21 18:27
回复
举报
老话重提,既然你都知道js不适合大规模开发,为什么还要以js为蓝本做一个动态语言的模板引擎?我觉得以jsp为蓝本才是java模板引擎该有的样子。
2017/08/21 17:13
回复
举报
闲大赋博主

引用来自“达亚达2”的评论

话说,在哪里捐钱给作者呢
ibeetl.com 上有微信二维码 😄
2017/08/21 16:49
回复
举报
话说,在哪里捐钱给作者呢
2017/08/21 16:02
回复
举报
开始学习beetl,向大神看齐30
2016/08/09 04:29
回复
举报
更多评论
打赏
94 评论
73 收藏
41
分享
在线直播报名
返回顶部
顶部