Blogn - 记录个人历史 Ver 3.0.0
http://www.bloggern.com
首页  留言本  注册  用户名: 密码:  
Play Framework 2.0几宗罪
作者:小猪   3857字节   点击:178127   回复:1839   所属分类:挨踢的人
创建时间:2012-05-29 10:37:23   最后修改时间:2012-05-29 10:43:45  
最近研究了一下被很多人吹嘘的Play Framework,当然,是它的最新版本2.0,完全基于Scala开发,Typesafe官方推荐,号称scala开发web应用的不二选择。我的基本感觉是,just like a toy。。。

1. 不支持j2ee
Play号称基于nio的event驱动,自行实现了http协议,比之传统j2ee应用性能高出无数云云,因此,使用Play,无需用到j2ee容器,也没有servlet/jsp的概念,只需要jvm,然后run就可以了。看上去的确很美好,然后一个很基本的事实是,除了个人的玩具应用,有哪个企业的IT管理员会愿意在已经熟悉的j2ee环境上在出现一个新的环境?更基本的事实是,从管理的角度来说,play提供的容器,能够达到j2ee规范的高度吗?更更基本的事实是,你能够相信它的安全性吗?虽然tomcat也会有安全漏洞,虽然jetty也不见得就真的安全,虽然websphere和weblogic都是要花钱的,但是比起他们来,你会更相信play的容器吗?我相信99%的答案是No。
(当然,有一个第三方插件项目在试图帮助Play部署war,但就其官方的态度而言,我是完全无法赞同的,而且,那个插件项目,远未到成熟的地步,因为Play从根子上就没有打算遵循j2ee规范)

2. 没有服务端session
Play的口号是stateless,但我并不认为这个可以成为不提供服务端session的理由,现实生活中大部分的网站还是需要session的,你哪怕提供一个插件来提供session功能也好啊,可是很遗憾,没有,官方的文档上说,请自行处理。。。自行处理。。。这个世界上还有程序员有兴趣去实现一个session管理吗?

3. 编译成函数的模板
Play认为这是它的优点,静态编译的模板,类型安全的参数传递。但我却被它彻底的打败了,为了向被各个页面复用的page top传递几个参数,我需要在每一个直接引用到它的模板,以及每一个间接引用到它的模板上添加所有的参数以便传递,因为,调用模板其实就是调用函数啊,我必须传递参数啊。。。当然,幸运的是,我们用的是scala,scala有implict参数定义,oh my God,我不需要传递参数了。。。可惜的是,我仍然需要在每一个层次的模板上声明必须的参数,这是怎样的一种精神,这是精神分裂的前兆。。。更加麻烦的是国际化与本地化处理,
Play提供了一个getmessage的函数让我们可以取得本地化字符串并且填入参数,功能很简单,当然,这并不妨碍我直接使用JDK的国际化API,因此这倒算不上它有多罪恶,然而,在表现层,或者说view层,当我希望根据locale选择一个不同的模板文件的时候,问题就麻烦了,静态编译的模板,类型安全。。。似乎我需要用到反射才能够根据locale选择模板了。。。让我去死吧。。。

4. Comet
Play内置Comet支持,看上去非常方便,然而当我终于搞明白它是如何实现comet的时候,我实在忍不住喷了满屏的口水,再放声大笑。。。这是整个Play框架中最富娱乐精神的实现,绝对可以入围2012年度最佳编程娱乐奖的评选活动。通常Comet的实现有很多种办法,典型的无非是ajax based long pulling, iframe based long pulling, websocket based server side pushing,你们还能想出其他的办法吗?Play给出了一个绝佳的方案,http chunk based server side pushing via iframe。不明白http chunk的同学请自行google,我简单的解释一下就是,在iframe中发起一个访问,然后服务端不会关闭http连接,而是返回基于chunk的应答,这样,客户端浏览器就会意识到服务器的应答没有结束而一直保持连接,服务端如何有事件发生,就返回一个chunk,通常是一段javascript代码,然后浏览器收到一个chunk,在等待下一个chunk的同时,执行javascript,实现了一个完美的server push机制。Wow,看上去非常perfect哈,不过请大家想像一个浏览器在处理一个长连接的时候会是怎样的动作?答案是浏览器会显示沙漏图标提示网页正在下载中,即使它是一个隐藏的iframe也是一样,于是,你就会发现,你的浏览器上会有一个转圈的图标在不停的转啊转啊,然后像我这样愚蠢的用户就会手贱的点停止,嗯,很好,不转了,整个世界清静了,太清静啦,浏览器不再接受服务端的response了,连接被关闭了,comet也over了。。。

5. 文档支持
Play试图提供一个完整的web开发的生态环境,可是如此伟大的目标,显示不是官网上那点step by step性质的文档可以支持的,可是我找不到更多的文档了,官网提供的文档足够我开发一个玩具应用了,然而,也仅此而已了。

网上很多人吹嘘Play2.0如何美好,Scala程序员是如何欢欣鼓舞,然而我实在没有发现任何一丁点Play足以吸引我的东西,而它的不足之处是如此的明显,我必须声明的是,Play还有更多让我觉得罪恶的东西,但我愿意承认那些东西更多的取决于个人的审美观。或许,等到3.0的时候,再来看看它的情况是比较明智的选择。至于现在,just play.
附件:
评论:
来自: 114.253.84.*   字节:30  ID:18743  发贴时间:2012-05-30 22:35:24  原贴 
这种东西多得很啊,一戳就破……  
来自: 126.65.155.*   字节:118  ID:18744  发贴时间:2012-05-31 07:44:29  原贴 
Play的影响力在于它现在由typesafe官方作为scala开发的推荐框架,而typesafe正是scala的维护者。老实说,我真的无法理解。。。  
来自: 124.193.167.*   字节:48  ID:18895  发贴时间:2013-01-07 19:20:35  原贴 
play2和play1完全是两个东西,自己要把自己搞死了。  
来自: 114.80.133.*   字节:61  ID:19052  发贴时间:2013-08-15 19:40:02  原贴 
部分原因是你一直在被JAVAEE洗脑,并不能把Web开发是什么看明白。  
来自: 14.110.147.*   字节:52  ID:19057  发贴时间:2013-09-10 19:44:41  原贴 
我们公司就是用的play,至于你说的这几点,多了解在说话  
来自: 59.57.250.*   字节:16  ID:19061  发贴时间:2013-09-24 01:47:58  原贴 
多了解再说话吧!  
来自: 60.247.90.*   字节:64  ID:19062  发贴时间:2013-09-27 04:06:37  原贴 
部分原因是你一直在被JAVAEE洗脑,并不能把Web开发是什么看明白。  
来自: 124.74.131.*   字节:24  ID:19089  发贴时间:2013-10-28 18:49:02  原贴 
楼主没有一颗开放包容的心  
来自: 180.169.59.*   字节:52  ID:19093  发贴时间:2013-11-13 01:12:30  原贴 
言语很激动,但很有道理。我喜欢!我也手贱!支持博主。  
来自: 8.37.224.*   字节:64  ID:19100  发贴时间:2013-12-05 02:22:49  原贴 
部分原因是你一直在被JAVAEE洗脑,并不能把Web开发是什么看明白。  
来自: 211.136.135.*   字节:39  ID:19104  发贴时间:2013-12-29 20:20:35  原贴 
个人觉得1不是问题。后面几点比较成问题。  
来自: 小猪   字节:292  ID:19115  发贴时间:2014-02-12 05:56:12  原贴 
看上去有很多人不同意我哈,那有人能为我指责的内容辩解一下么?也没人出来辩解嘛,还是play而已嘛。。。

另外,请注意本文的发表时间是在play2.0刚刚发布的时候,现在已经过去两年啦,也许它已经不再像一个toy了,可是2012年5月的时候,它的的确确就是个toy哈,不同意的,把我列出的问题都解释一下呗。。。  
来自: 小猪   字节:1181  ID:19128  发贴时间:2014-03-24 22:12:17  原贴 
说得让你更难过一点,就是我让play给恶心坏了,不喷它我简直不自在,行不?

1. 一边是四个用了十年的轮子,一边是新发明的轮子,我更相信旧轮子。当然,你会更喜欢新轮子,有phper重写一个apache的么?好吧,我承认这个更多取决于审美,鉴于我自己这些年也做了不少轮子,这条算我喷的过了。

2. 你是故意逗逼的么?我说的“服务端session”,你跟我说servlet session?你要是自己没搞明白呢,我也没义务教会你,你要是故意混淆概念,那就是在胡搅蛮缠了,所以呢,走好,不送。

3. 原来可以不用声明模板参数就可以传变量的方法啊,在哪儿?在哪儿?两年前的文档上没有啊,你是说我应该去读源代码?而且,你没有回答我的问题啊,编译成函数的模板,我希望为不同的locale提供不同的模板文件怎么办?反射?你是说你不需要这个功能?可是有人需要啊,框架不支持到这一步,那叫什么国际化?

4. 你能看懂中文么?再牛逼的功被用户简单的就能破坏掉有毛用?是说你的用户都没我手贱,还是但凡手贱的用户都弹小鸡鸡弹至生活不能自理?至于说哪个框架能比play的comet支持好,lift甩它几条街,哦,lift是stateful的,你是share nothing的,走好,不送。

5. 你哈哈,我也只能哈哈了,play的用户都是天才,play的作者也是天才,代码就是文档啊,读代码就够了,是吧?

最后再重复一边,play把我恶心坏了。。。过了两年后,我还是觉得恶心。。。  
来自: 小猪   字节:112  ID:19289  发贴时间:2014-07-21 19:20:15  原贴 
楼上只知道ssh的给我爬开,我tm有一个字说到S,S,H了吗?老子说的是j2ee,尼玛看不懂老子说啥子的就不要出来犯傻。。。  

本文允许匿名评论

发表评论:(最长不得超过128KB)
验证码: