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