Chinaunix

标题: Perl框架Dancer和Mojolicious的比较 [打印本页]

作者: py    时间: 2012-07-21 15:02
标题: Perl框架Dancer和Mojolicious的比较
一直用Dancer,最近由于Dancer的一些问题,多次尝试改换Mojolicious。但最终还是决定继续用Dancer了。

Mojolicious的作者以前是开发Catalyst的,独自一人完成的Mojolicious,看到很多地方提到Mojolicious优势的时候,说这个模块没有任何一个依赖性模块。在我看来,这正是它的一大缺点。

我提两个地方是我个人觉得它做的最可恶的地方,一个是模板,Mojolicious用的是自己的模板语言,而且好像并不支持其他模板语言,这意味着现有的项目需要做修改才能使用Mojolicious,这个太不方便了,至少应该支持其他模板语言。第二个是JSON。Mojolicious是自己写模块操纵JSON的,实际上,Mojolicious是自己写了所有工具模块,最终实现了“没有任何一个依赖性模块”。不知道作者是出于什么考虑,但现在这年代做软件不应该这样的。放着成熟的现成的模块不用,自己写一切,这就是risk使用者的产品,可能正是因为此去年Mojolicious因为漏洞受到攻击,还过了段时间作者才发补丁。

Mojolicious的优点也非常明显,http://mojolicio.us/首页上已经把优点都写全了。个人认为的优点有2个,第一是AnyEvent/libev的支持,这对我很有意义。第二个是$self->ua->get($url)->res->dom->html->head->title->text。呵呵,挺新颖。

Dancer和Mojolicious相比差在AnyEvent/libev的支持,但实际Dancer也可以支持一些AnyEvent。这方面我没有深入探究,所以不好多说。另外Dancer是法国人做的,个人觉得Dancer还是很反应法国人特点的,Dancer从名字到运行的代码方式,甚至是关键字,都反映出法国人的性格特点,elegant. 只是实在担心法国人的代码水平,Dancer要是德国人或俄罗斯人写的就更完美了。

上面提到的Mojolicious的那两个缺陷Dancer都做的非常好。个人认为Dancer最大的优点是简单,开始我只大概扫了一眼Dancer的文档,连蒙带猜上手非常快。

权衡之后,还是继续乖乖用Dancer了。


作者: xiyoulaoyuanjia    时间: 2012-07-21 16:32
说的不错!(*^__^*) 嘻嘻……
作者: mitiao    时间: 2012-07-21 17:53
Perl 的 Web 框架只用过 Dancer。。。
作者: wxlfh    时间: 2012-07-21 18:34
想请教下,Dancer不太支持AnyEvent/libev,是不是意味着不能构建并发较多的WEB应用场合?
作者: wxlfh    时间: 2012-07-22 11:54
py 发表于 2012-07-21 22:32
回复 4# wxlfh

不是这个意思。

就是说,如果Dancer用了Plack和Twiggy,还是能做到无阻塞的?
作者: py    时间: 2012-07-22 13:25
回复 6# wxlfh

是的。http://bbs.chinaunix.net/thread-3755305-1-1.html
   
作者: py    时间: 2012-07-22 22:25
早就看Template::Toolkit不顺眼了,没想到它性能还这么差。看来要换换了

刚看了下Text::Xslate的文档(http://search.cpan.org/~gfuji/Te ... /lib/Text/Xslate.pm),这英语可真够差的。。。DESCRIPTION写的就是个中学生水平
作者: iakuf    时间: 2012-07-22 23:20
日本人的英文不错了,比我们好太多了,我们的 Perl 工程师有几个能好好读英文的.能写出来英文的就更加少了.Text::Xslate 性能在硬件不好的时候好象也不太好
作者: mitiao    时间: 2012-07-23 14:56
回复 11# iakuf
问一下,Dancer 能支持 Xslate 么???
作者: py    时间: 2012-07-23 16:06
回复 12# mitiao

能。
昨天刚试的。


   
作者: py    时间: 2012-07-23 16:08
回复 8# iakuf

我怀疑这个性能的增加只是因为预编译了模板,现在Template也会生成一个预编译的模板。我是最近发现的,不知道上面的测试结果中Template是否也预编译了模板文件。
   
作者: 斯文牛氓    时间: 2012-07-24 11:01
iakuf 发表于 2012-07-22 23:20
日本人的英文不错了,比我们好太多了,我们的 Perl 工程师有几个能好好读英文的.能写出来英文的就更加少了.Te ...


坚持程序里写英文注释,坚持把程序的pod文档全英文化,基本能提升一个档次
作者: hitsubunnu    时间: 2012-07-25 09:48
gfx开发Text :: Xslate的时候 还是在校学生 所以不要苛求太多

tx是纯c写的所以比较快 还有很多别的方便的东西 自动支持WAF 内建一些perl6语法 。。。
作者: hitsubunnu    时间: 2012-07-25 09:52
Dancer 最好是跟 Mojolicious :: Lite 比较
Dancer Kossy Mojolicious :: Lite 以及 nodejs的express 说白了都是 ruby的Sinatra 的移植版而已
作者: py    时间: 2012-07-25 09:59
hitsubunnu 发表于 2012-07-25 09:48
gfx开发Text :: Xslate的时候 还是在校学生 所以不要苛求太多

tx是纯c写的所以比较快 还有很多别的方便 ...


那就说的通了,他那英语实在是差啊。。。

ps.你还在日本呢?
作者: iakuf    时间: 2012-11-01 18:56
py 发表于 2012-07-21 15:02
我提两个地方是我个人觉得它做的最可恶的地方,一个是模板,Mojolicious用的是自己的模板语言,而且好像并不支持其他模板语言,这意味着现有的项目需要做修改才能使用Mojolicious,这个太不方便了,至少应该支持其他模板语言。

M ...


近来研究了一下 Mojolicious ,可以支持第三方模板,我有点想给我的项目转到这上面去了。
作者: py    时间: 2012-11-04 10:04
回复 19# iakuf

根据小日本的观测数据,mojolicious的使用者和dancer几乎持平,dancer稍多一点。我只是简单试了一下mojolicious,没深入使用过。要不你再写个mojolicious的教程,我也把项目换成mojolicious的。呵呵

   
作者: flw    时间: 2012-11-04 13:15
mojolicious 我连名字都不会念,更不会写,肯定不会用它了。

Dancer 好啊 Dancer 好,Dancer 就是好。
作者: 斯文牛氓    时间: 2012-11-04 21:07
还是catalyst最高!
作者: iakuf    时间: 2012-11-05 09:51
py 发表于 2012-11-04 10:04
回复 19# iakuf

根据小日本的观测数据,mojolicious的使用者和dancer几乎持平,dancer稍多一点。我只是 ...


顺利的话,这周全中文的 Mojo 网站就出来了。
作者: goddessavril    时间: 2013-02-19 09:36
iakuf 发表于 2012-07-22 23:20
日本人的英文不错了,比我们好太多了,我们的 Perl 工程师有几个能好好读英文的.能写出来英文的就更加少了.Te ...
这个得看个人的说,想学的话谁都能学好,只是时间的问题
作者: sx98083714    时间: 2013-03-19 14:20
这二天在看dnacer,忽然想问下扶凯,Catalyst 为什么不推荐了?能否把这三者放在一块做下介绍和对比呢?期待回复以飨大家,谢谢!
作者: iakuf    时间: 2013-03-23 10:45
回复 24# sx98083714
因为我没学会 Catalyst 。。。目前主流的 Web 项目都进化得更加简单人性。所以用更加合适自己的框架。


   
作者: yiten    时间: 2013-03-27 18:23
我想问下,Dancer内置的Simple模板不支持类似与下面的循环变量吗?

<% FOREACH id IN entries.keys.nsort %>
<% entries.$id.title %>
<% entries.$id.text %>
<% END %>
作者: mitiao    时间: 2013-03-28 05:32
回复 26# yiten

印象中不支持,换用 template toolkit 或其他模板。。。
   
作者: 墨迹哥    时间: 2013-03-29 16:19
我想。。PY如果有空的话,可以写下这个框架的使用方式,科普下群众。。。- - !
当然,我说的是中文版本的说明。。。
作者: iakuf    时间: 2013-04-01 09:26
回复 28# 墨迹哥

建议使用 Text::Xslate 做模板,使用的语法和性能都优于其它的。相关中文文档 Text::Xslate
   
作者: 墨迹哥    时间: 2013-04-01 10:38
iakuf 发表于 2013-04-01 09:26
回复 28# 墨迹哥

建议使用 Text::Xslate 做模板,使用的语法和性能都优于其它的。相关中文文档 Text::X ...


对于我来说太高深了。。。
作者: iakuf    时间: 2013-04-10 14:44
本帖最后由 iakuf 于 2013-04-10 14:45 编辑

回复 1# py

今天和前辈 Fayland  交流了一下 Web 应用的框架相关的看法,和我比较接近。所以斗胆给这个放过来。可以考虑做为参考意见。

Perl 主流 Web 开发框架对比

http://www.php-oa.com/2013/04/10/perl-framework-comparison.html


   
作者: daokor    时间: 2013-04-10 15:06
之前也看过dancer,挺感兴趣的
作者: mitiao    时间: 2013-04-10 15:10
回复 31# iakuf
这个好!一直用Dancer,之前的应用由于Dancer和Plack的bug使得route一直有问题,虽然升级后没有问题了,看来转向mojo是个好选择啊。。。
   
作者: py    时间: 2013-04-10 21:49
回复 31# iakuf

一直以为mojo是用的第三方的web服务器,Dancer默认用的HTTP::Server::Simple我记得。。。最近用Dancer对它的好感越来越少,深入尝试mojo肯定是早晚的事了。发现Dancer在配合AnyEvent,Coro的时候总有些奇怪的问题,以后有时间把问题总结一下,也看看mojo是不是有同样问题。
   
作者: hitsubunnu    时间: 2013-04-11 16:03
回复 31# iakuf

你应该再多介绍个框架 CGI::App 最老最简单的框架 学习曲线基本为0 在plack下性能还是可以的。
作者: 兰花仙子    时间: 2013-04-11 21:05
iakuf 发表于 2013-04-10 14:44
回复 1# py

今天和前辈 Fayland  交流了一下 Web 应用的框架相关的看法,和我比较接近。所以斗胆给这个 ...


不错的博文
作者: iakuf    时间: 2013-04-11 21:40
回复 35# hitsubunnu

落后的东西就不要教了。
   
作者: hitsubunnu    时间: 2013-04-12 12:06
回复 37# iakuf


怎么能说落后呢 简单有效还是不错的

大家在cpan上评价也不错 http://cpanratings.perl.org/dist/CGI-Application
作者: climby    时间: 2013-04-12 13:07
我最近用一下mojolicious. 一个是类似于会议室预订系统, 一个是用来管理设备的。 (Mojolicious + DBIx::Class+ TT2)
上手后,感觉还蛮喜欢的。 比Catalyst 轻量很多,灵活的url mapping ( url 映射到函数上), 多种render ( txt, json, template).
一句话, I like it  :wink:
作者: py    时间: 2013-04-12 13:17
climby 发表于 2013-04-12 13:07
我最近用一下mojolicious. 一个是类似于会议室预订系统, 一个是用来管理设备的。 (Mojolicious + DBIx::C ...


只说你上面提到的这些,Dancer只会比mojolicious更好
作者: climby    时间: 2013-04-12 13:46
回复 40# py

哦, 那有机会再尝试尝试dancer
作者: iakuf    时间: 2013-04-13 11:18
回复 39# climby


模板用默认的,比 TT 好用太多太多,非常强大,还有默认的几个插件一起。可以少写太多的代码了。
作者: iakuf    时间: 2013-04-13 11:19
回复 40# py
我的认为是相反的, Mojo 比 Dancer 在这个方面更加容易


   
作者: climby    时间: 2013-04-13 22:47
回复 42# iakuf
  以前用tt2 用习惯了, 对默认模板没有太多研究。 默认模板也支持直接可以调用obj的函数么?
就是将obj 通过stash 传递给模板, 模板中可以直接 调用obj的函数么?
作者: iakuf    时间: 2013-04-15 10:13
本帖最后由 iakuf 于 2013-04-15 10:15 编辑

回复 44# climby

这是基本功能,一定能实现。还有更加多强大的功能。

比如 Dump 数据时,不用象 TT 使用外部的模块。

比如他生成 url 比其它的模板技术也方便
  1. url_for('route_name')->query(foo => 'a', bar => 'b')
复制代码
比如他默认支持的 Mojolicious::Plugin::TagHelpers 这个功能就很强大,原来还不这么认为,上次陈子问我有没有象 Ruby 中一些功能的模板时,我想到,这不就是 TagHelpers 的实现吗。

比如你写个
  1. %= check_box employed => 1
  2. %= check_box employed => 1, id => 'foo'
  3. %= image '/images/foo.png', alt => 'Foo'
复制代码
会自动生成 html
  1.   <input name="employed" type="checkbox" value="1" />
  2.   <input id="foo" name="employed" type="checkbox" value="1" />
  3.   <img alt="Foo" src="/images/foo.png" />
复制代码

作者: climby    时间: 2013-04-15 12:18
回复 45# iakuf


    这些都是挺不错的feature. 有时间还真的研究一下mojolicious的默认模板了。 想必默认模板也是支持 模板组合和嵌套的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2