ZhangJinglin

即使生活有一千个理由让你哭泣,你也应该有一千零一个理由让自己微笑
posts - 2, comments - 7, trackbacks - 0, articles - 0

Ruby on Rails 与 Grails 之比较(一):简介

Posted on 2007-04-18 15:01 ZhangJinglin 阅读(3091) 评论(7)  编辑  收藏 所属分类: Grails
        最近一段时间,Ruby on Rails(以下简称ROR)在Java社区中越来越升温,所有的Java程序员都为这一敏捷的开发框架感到惊奇,惊奇ROR所带来的惊人的开发效率。ROR的主页上这样描述:“Ruby on Rails是一个开源框架,致力于编程的乐趣和生产效率,让你通过习惯优于配置(COCConvention over Configuration)来编写优美的代码”。非常棒,通过对ROR的了解,Java程序员发现编写程序充满了乐趣和生产效率的提高。但随之而来的就是,ROR基于Ruby语言,一种全新的动态脚本语言,它和Java没有任何关系,当Java程序员度过了最初的美妙感受后,不得不深入了解Ruby语言。而且,ROR的运行效率现在还没法和成熟的Java EE相比较,更不用说成千上万的公司在Java平台所做出来的投入如何继承了。

我们可以把目光放得更远些,GroovyGrails就进入了我们的视线。

        Groovy是一种动态脚本语言,关键是它是基于Java的动态脚本语言,这就足以让所有的Java程序员感到兴奋了。Grails是基于Groovy的类似于Rails的实现,原本叫做Groovy on Rails,因为商标的问题,称作Grails。“Grails并不是Rails的克隆,它的目标是为Java程序员提供一个熟悉的类似Rails的开发环境,使Java程序员可以利用已有的知识进入动态框架,以避免带来巨大的跳跃。比如在Grails中提供了Java程序员非常熟悉的拦截器(interceptors)、标记库(tag lib)、Groovy Server PageGSP)等等”。

        让我们深入看以下Grails到底是什么。Grails在底层是基于开源的HibernateSpringSiteMesh的封装,利用Hibernate实现ORM,利用Spring实现MVC,利用SiteMesh实现页面的布局。Java程序员看到这些技术应该是最熟悉不过的,而且可以确保的是,这些技术是久经考验和经过生产验证的。

        如果我们有了基于Java的动态脚本语言,又有了类似Rails的敏捷开发框架,而且这个框架又是基于久经考验的底层框架之上,我们为什么不投入Grails的怀抱呢。

Feedback

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-18 15:33 by 山风小子
Groovy继承了Java的所有资源,并以自身强大的语法特性使开发更高效。
Grails基于极为成熟的经典框架,并对其进行了extreme封装(extreme封装,引用了‘江南白衣’的术语),使用户感觉不到底层实现,无需配置,高效开发。而且性能比RoR好很多。
下面是Grails和RoR的性能比较:
http://www.blogjava.net/BlueSUN/archive/2007/03/24/106002.html
事实胜于雄辩。

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-18 19:06 by xyz20003
事实是groovy运行之前都需要预编译,像访问jsp之前一顿那样,这是让我火大之一,为啥不搞成直接运行的?每次测试还要让我等那么一顿的时间。

第二,grails的代码与测试时间明显比ror慢很多,看控制台输出明明还是做了cache的,可还是慢,估计是因为先启动jvm,然后预编译groovy的结果,要知道ror宣称的是开发速度提高,每次都顿啊顿的,让自己的信心大减。

第三,感觉groovy的语法还是没有ruby灵活,省略括号调用method只能省略一级,如果要嵌套调用方法,比如print dosomething param,这样就不行了,还要老老实实地添上括号,唉,总是感觉没那么顺心。

性能比较就算了,毕竟是网络开发,听说瓶颈都是数据库那里。现在还在观望grails的发展。groovy倒是已经装在机器上,啥时候想实验一些类和方法,就直接groovysh来调用,比再去建个class省事。

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-18 19:24 by 山风小子
@xyz20003

您说的不无道理,但我想补充几句:
Groovy的预编译有一个好处您或许没有体会到,那就是防止程序运行到一半才报coding错误,这样其实已经为您节省了很多时间了 :)
当然您也可以将Groovy文件编译为class文件,这样就可以省去运行前的编译了。

至于grails的启动比较慢,这的确是一个事实,但我们也不可忽视Grails的reload功能,也就是说,只要运行了你的程序之后,无需重启web server,你的修改可以立刻生效,所以Grails实施的是‘先苦后甜’的策略。您如果用它开发过项目的话,就可以体会到了 :)

至于语法的灵活性,我持保守态度,过于灵活的语法使程序很难维护,这相信您也有所体会吧 :) Java的语法过于笨拙,而Ruby,Python的语法过于灵活,所以Groovy做个折衷,以Java的语法为基础,将Ruby和Python中真正有用的特性添加进来,所以可以这么说,Groovy是动态Java,但由于‘Java’这个商标问题,不能叫Dynamic Java.

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-19 09:48 by xyz20003
@山风小子
呵呵~感觉光动态还不够,我们需要的使用上得到真正的便利,而不是为了使用某某技术这种幌子。

预编译的问题,从jsp开始我一直是非常反感的,这么说吧,调试错误从某种方面来说,更依赖于开发人员的经验。而帮助开发人员调试语法错误的应该是ide工具,而不是简陋的编译器。

至于动态reload,这个并不是我希望讨论的范围内,毕竟tomcat等servlet容器都支持动态reload,但你修改了关键配置文件还是需要重新启动的。即便是ror,你改了数据库配置,也是要重新启动的。

不过既然说到grails的reload,我也加上两句,还是预编译的问题,你修改了groovy或者gsp,再访问页面,总是能感到一段休克时间,这就是预编译的占用时间了,而像freemarker这种模板就不会出现这种问题,再说了freemarker也都支持cache,而开发阶段又可以把cache关闭,开发阶段不影响调试,发布阶段不影响效率。这多好?现在想想,要是java能设置个开关,能控制是否使用预编译就好了。

反正感觉groovy on rails还是太不成熟了。再观望一端看看。

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-19 11:37 by 山风小子
@xyz20003

groovy的预编译会将.groovy文件编译为优化过的.class,在编译的时候会消耗点时间,但以后运行起来就快很多了,所以也不能完全否定了,您说对吧 :)

至于reload,我想您不会频繁的改数据库配置吧,一旦定了用什么数据库,username和password,url,driver也就定下来了,而修改这些配置的几率很小,因此reload这个功能在开发调试中能很好的发挥作用的 :)

groovy1.1会对compiler的性能进行调优,到时您或许就不会感觉到预编译了 :)

Grails将在Groovy完全支持Annotation(Groovy1.1将支持Annotation)之后,集成Guice,提高整体性能,包括启动速度,到时您不妨再试试,体验一下Grails的乐趣 :)

# re: Ruby on Rails 与 Grails 之比较(一):简介[未登录]  回复  更多评论   

2007-04-19 14:10 by zhangjinglin
其实,真正的探讨ROR和Grails之间的问题,可能像探讨JavaEE和.NET之间问题一样。
现在的问题是,ROR已经发布到了1.2,可是Grails只有0.4,好像马上要发布0.5了。从技术成熟度上说,恐怕要差和大一块,如果我们能够理解ROR的开发理念,而关注Grails的发展,等到Grails成熟后,我想可就是另一种结果了。
更为关键的问题是,Grails建立在Java基础上,这是一个ROR无可比拟的优势,试想如果Java不是建立在更好的C++上,C++不是建立在C上,今天的C++或者Java也许只是小语种,呵呵。
我学习ROR的时候,看的就是Agile web development with rails,(好像地球人都看这本),我惊奇Rails的开发效率,我迷惑Ruby的语法。我发现,我想要学好Rails必须深入学习Ruby,一个我从来不知道的语言。所以学习进度也是很慢。
在学习Grails的时候,看的时InfoQ 的grails getting started,只用了很短的时间就初步掌握了。而且用了1天半就完成了一个资源下载系统,而且可以评论,虽然很初级,但却是工作在完全的Java环境下,总之,就是快乐。
用ROR的确快乐,但有时却很痛苦(不熟悉Ruby),Grails却给我持续的快感。
我想写这个系列,主要是想用ROR的思想来对比了解Grails,毕竟ROR已经很成熟了,Grails的资料都很少。
初步设想可能包括(二)基本开发过程的比较(三)控制器的比较(四)视图的比较(五)域模型的比较(这个是重点)(六)Ajax的比较(七)Ruby 与 Groovy的比较
不知道有没有精力完成,工作太多......

# re: Ruby on Rails 与 Grails 之比较(一):简介  回复  更多评论   

2007-04-19 14:28 by 山风小子
@zhangjinglin
非常期待您接下来的一系列文章 :)

只有注册用户登录后才能发表评论。


网站导航: