<p dir="ltr">Essa avaliação está tão errada (tanto filosoficamente, quanto tecnicamente) que a resposta não cabe num email. Quem sabe um dia eu arrumo o tempo e a paciência pra escrever um blog. Hoje, esse tempo é mais bem-investido em contribuições de código. </p>

<div class="gmail_quote">On Jul 23, 2013 1:52 PM, "Nelson Ferraz" <<a href="mailto:nferraz@gmail.com">nferraz@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Em 23 de julho de 2013 16:02, Eden Cardim <<a href="mailto:eden@insoli.de">eden@insoli.de</a>> escreveu:<br>
> Nem é tão gordo assim, na real, se você rodar o Perl::Metrics::Simple<br>
> no repositório de ambos, vai ver que de fato, o Mojo é mais gordo:<br>
><br>
> <a href="http://pastie.org/8167416" target="_blank">http://pastie.org/8167416</a><br>
> <a href="http://pastie.org/8167419" target="_blank">http://pastie.org/8167419</a><br>
><br>
> O mojo além de ter quase o dobro de código, o código existente é mais<br>
> complexo. Mas isso é porque ele oferece mais funcionalidades<br>
> out-of-the-box.<br>
<br>
Existem várias maneiras de se medir a gordura de um software. :)<br>
<br>
Se você considerar as dependências do Catalyst, ele é muito mais<br>
pesado do que o do Mojolicious:<br>
<br>
$ valgrind --trace-children=yes ./<a href="http://hello.pl" target="_blank">hello.pl</a> cgi<br>
==69320== HEAP SUMMARY:<br>
==69320==     in use at exit: 15,848,999 bytes in 218,306 blocks<br>
==69320==   total heap usage: 443,519 allocs, 225,213 frees,<br>
31,393,607 bytes allocated<br>
<br>
$ valgrind --trace-children=yes script/<a href="http://hello_cgi.pl" target="_blank">hello_cgi.pl</a><br>
==69129== HEAP SUMMARY:<br>
==69129==     in use at exit: 30,403,225 bytes in 367,771 blocks<br>
==69129==   total heap usage: 953,305 allocs, 585,534 frees,<br>
68,755,287 bytes allocated<br>
<br>
A razão de usarmos cgi no exemplo acima é porque só queremos saber a<br>
memória consumida pela aplicação e seus módulos.<br>
<br>
Mas usando o daemon a diferença é ainda mais acentuada:<br>
<br>
$ valgrind --trace-children=yes ./<a href="http://hello.pl" target="_blank">hello.pl</a> daemon<br>
==69136== HEAP SUMMARY:<br>
==69136==     in use at exit: 15,346,874 bytes in 213,371 blocks<br>
==69136==   total heap usage: 429,907 allocs, 216,536 frees,<br>
29,530,889 bytes allocated<br>
<br>
$ valgrind --trace-children=yes Hello/script/<a href="http://hello_server.pl" target="_blank">hello_server.pl</a><br>
==69163== HEAP SUMMARY:<br>
==69163==     in use at exit: 31,619,768 bytes in 381,456 blocks<br>
==69163==   total heap usage: 995,648 allocs, 614,192 frees,<br>
74,499,357 bytes allocated<br>
<br>
Ou seja: o Catalyst é (em termos de memória) 2.5 vezes maior do que o<br>
Mojolicious.<br>
<br>
***<br>
<br>
Usando o Devel::NYTProf podemos ter uma idéia do número de instruções<br>
que são executadas quando o Mojolicious e o Catalyst são executados:<br>
<br>
$ perl -MDevel::NYTProf ./<a href="http://hello.pl" target="_blank">hello.pl</a> cgi # Mojolicious<br>
$ perl -MDevel::NYTProf script/<a href="http://hello_cgi.pl" target="_blank">hello_cgi.pl</a> # Catalyst<br>
<br>
Resultado:<br>
<br>
Mojolicious: 34.195 statements<br>
Catalyst: 731.191 statements<br>
<br>
Ou seja: o Catalyst executa 20 vezes mais instruções do que o<br>
Mojolicious durante a inicialização.<br>
<br>
A comparação acima pode não parecer muito justa, pois nós sabemos que<br>
o Catalyst tem que carregar muito mais módulos do que o Mojolicious no<br>
início; mas isso dá uma boa indicação da complexidade algoritmica dos<br>
dois frameworks.<br>
<br>
Vamos comparar também o número de instruções executadas no start() do<br>
Mojolicious com o setup() do Catalyst:<br>
<br>
Mojolicious: 221 statements<br>
Catalyst: 23.898 statements<br>
<br>
Uma diferença de 100x em favor do Mojolicious.<br>
<br>
***<br>
<br>
Será que isso reflete de alguma forma nos tempos de resposta e escalabilidade?<br>
<br>
Acho que não, pois, na maioria das vezes, o gargalo está na base de<br>
dados, e não na aplicação.<br>
<br>
Mas isso quer dizer que o Mojolicious é "melhor"?<br>
<br>
Também não.<br>
<br>
Como muitos já disseram, o Catalyst, com sua arquitetura altamente<br>
modular, é mais flexível do que o Mojolicious.<br>
<br>
Mas essa flexibilidade vem com um preço -- o que eu procurei mostrar é<br>
que, por diversas métricas, o Mojolicious é mais leve (e<br>
algoritimicamente simples) do que o Catalyst, mesmo considerando que<br>
vem com mais funcionalidades "out-of-the-box".<br>
<br>
Resta saber o que você valoriza: flexibilidade ou simplicidade?<br>
<br>
Eu fico com o antigo slogan da Apple: "Simplicity is the ultimate<br>
sophistication". :)<br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</blockquote></div>