Mootools vs. jQuery
A batalha final: Mootools versus jQuery. Quem será o vencedor dessa sangrenta batalha? Tudo bem, sem violência então. Como mais novo usuário de jQuery e ainda usuário de Mootools, tive a idéia de fazer apenas uma breve comparação com as duas bibliotecas, nada de luta…
Antes de tudo, nem pensem os usuários de Mootools que sou um traidor, um subversor, nem os usuários de jQuery achem que sou um “fiel convertido” e abandonarei a Mootools para todo o sempre. Ambos dois lados de acordo e em paz, vamos à comparação.
Propósito
A primeira coisa que me fez dar uma segunda chance ao jQuery foi minha maturidade adquirida de uns tempos pra cá. Pude perceber que jQuery e Mootools têm propósitos diferentes. Pode-se usá-las para a mesma coisa, mas mais código terá que ser escrito.
A Mootools é uma biblioteca bem mais complexa e mais completa. Seu escopo é bem maior, e permite muito mais coisas. Algumas dessas coisas são a criação de classes, vários métodos para os tipos nativos da linguagem (funções para Strings, Números, Arrays), JSON, cookies, e tudo o mais que você puder imaginar através de plugins. É bem mais voltada a “programação de verdade”, ou seja, trabalhar mais com a linguagem e processamento do que seu resultado no documento.
A jQuery tem um escopo muito mais fechado: DOM. Criação e edição de objetos, seletores muito poderosos e simples, baseados em CSS e XPath e manipulação de eventos. Tudo isso integrado dentro de uma mesma função. Indo um pouco mais além, a biblioteca também inclui a criação de efeitos básicos e requisições Ajax. Ainda dentro do cifrão bombado.
DOM
Tanto Mootools quanto jQuery lutam nesse campo: DOM. Ambas também possuem a mesma função $, que vem me confundindo muito quando trabalho com uma ou outra biblioteca. Na Mootools, somente IDs. no jQuery, qualquer seletor CSS3 ou XPath. Não que a Mootools não tenha todos os seletores que jQuery, mas em uma função diferente: $$. Particularmente gostei separação, mas a versatilidade da jQuery absolutamente não me incomoda. Nessa parte, pra mim é um empate.
Ainda não tive a oportunidade de inspecionar o código da jQuery, mas posso dizer que o John Resig é um gênio: além de recuperar elementos do documento, o $ ainda os cria. E não através da criação manual de elementos e nós de texto. Você digita o HTML, e a função os cria sozinha. Adeus innerHTML… Na Mootools? Bem, acho melhor pular essa parte, vocês já devem ter percebido… jQuery na cabeça.
Quanto às outras funções, como definição e recuperação de atributos, ambas bibliotecas não deixam a desejar. A jQuery, entretanto, tem o diferencial de usar a mesma função para definição de uma ou várias propriedades, além de recuperá-las. Na Mootools, temos o get e set. Pra mim não faz diferença alguma em termos de desenvolvimento, ambas são intuitivas. Empate novamente.
No final das contas, jQuery é excepcional em tarefas de DOM, e supera, e muito, a Mootools, até por ser seu “habitat natural”.
Ajax
Ajax é outra frente de batalha em que as duas bibliotecas se enfrentam. jQuery conta com métodos extremamente simples para a tarefa, muito bons para requisições simples em aplicações pouco exigentes em relação a requisições assíncronas. Já a Mootools conta com uma classe bem mais trabalhada, mais extensa e mais flexível, principalmente para eventos.
Mesmo trabalhando com, as duas bibliotecas não o fazem para o mesmo propósito na minha opinião. A jQuery me parece melhor para requisições simples: enviar a requisição e fazer alguma coisa com a resposta. Já a Mootools trabalha com os aspectos mais “sórdidos”, como as mudanças de estado, headers, enfim. Até prefiro não falar muito sobre jQuery aqui pois não tive muito tempo com Ajax, posso ainda não ter visto algumas funcionalidades.
Efeitos
Existe algo que deixe uma aplicação mais interessante do que coisas se mexendo? Eu acho que não, mas esse não é o caso. Na jQuery, temos poucos efeitos built-in, mas me parece ser bem extensível. Já a Mootools tem uma gama enorme de transições, e podemos escolher qualquer propriedade do CSS para animar, e o melhor: ainda contamos com uma maneira muito fácil de criar novas transições. Mas a Mootools, principalmente nessa nova versão, peca em manter esses efeitos fáceis de aplicar. No jQuery, só um fadeIn ou fadeOut e presto, temos um efeito. No entanto, por mais chato que seja, ainda fico com a Mootools…
Plugins
Quando só a biblioteca sozinha não dá conta, hora de chamar os plugins. Ambas bibliotecas são extremamente extensíveis, cada uma a sua maneira. Na Mootools através da extensão das classes, no jQuery através de um “mecanismo” muito interessante, que “gruda” suas funções na função jQuery.
Mesmo sendo um fã da programação orientada a objetos e da maneira como a Mootools o usa, gostei muito mais da maneira como o jQuery faz a inclusão de plugins. Eles realmente passam a fazer parte da biblioteca. Vitória do jQuery, embora no final das contas não faça diferença alguma…
Facilidade de Uso
Nenhuma das bibliotecas tem um uso complicado. Além disso, ambas tem um foco diferente.
Talvez você já tenha notado, mas a maioria dos designers e programadores JavaScript menos experientes preferem jQuery. Não é à toa, ela é extremamente simples de ser usada. Nunca ouviu dizer que jQuery é para designers? Isso também não significa que usuários mais experientes ou experts na linguagem não irão gostar ou conseguir trabalhar.
Já a Mootools, como diz o próprio site, é direcionada a usuários intermediários ou avançados. À primeira vista ela é realmente mais complicada, sem dúvida. Talvez por isso não chame tanto a atenção quanto jQuery.
E o vencedor é…
Como disse logo no início do texto, jQuery e Mootools são bibliotecas diferentes, servindo para propósitos diferentes. Não é possível compará-las em sua totalidade, por isso não falei sobre muitos recursos que a Mootools oferece e jQuery não tem (built-in, é claro). jQuery é para DOM, Mootools é para facilitar sua programação. Já imaginou ambas bibliotecas juntas? Enfim, tenha bom senso e saiba utilizar as bibliotecas onde elas se dão bem, e não seja cabeça-dura como eu era tentando usar a Mootools em qualquer situação…







Entre essas duas bibliotecas, a jQuery sai muito na frente da Mootools; pra mim, se é pra usar a Mootools, parte direto para a Prototype, já que é mais completa e faz muito mais do que a Mootools.
O lance bacana da jQuery, como comentei em outro post, são os plugins. Bem melhor…
Abraço
@Christian: não conheço muito da Prototype, mas o que ela faz mais do que a Mootools? Sempre tive essa curiosidade…
Julio, quando eu comecei a utilizar essas bibliotecas (acho que no começo/meio de 2006), a diferença de quantidade de classes e métodos entre a Prototype e a Mootools era gritante.
Quando vi essa sua pergunta, fui dar uma outra verificada agora e vi que ela está bem mais completa, com muito mais coisas (inclusive tem incorporada uma classe para drag’n drop de elementos – coisa que a Prototype não tem, é necessário usar uma outra biblioteca tipo script.aculo.us).
Vou dar uma outra verificada na Mootools, não sabia que ela tinha evoluído tanto assim ;)
@Chris: ahh bom… Assim que redescobrir a Mootools aí, me diz o que achou, e o que a Prototype tem que ela não tem, ou vice-versa, sou bem curioso quanto a isso. Até mais!
Muito bom artigo, parabéns! Meu ponto de vista é idêntico, sem tirar nem pôr.
Ótimo post e comparação Julio. Serviu pra me ajudar a definir algumas coisas. O primeiro ítem que escreveu (‘Propósito’) foi muito interessante pra mim, eu não sabia disso.
Quanto aos plugins e efeitos, o jquery tem me decepcionado ultimamente. Travando várias vezes e bugs do tipo. Acredito que o UI do mootols é melhor que o UI do jquery (que você mostrou em outro post seu).
Té mais.
@Micox: quanto ao propósito, não tenho certeza se elas foram feitas assim, mas é como eu prefiro pensar que seja =] Quanto a UI, no momento a Mocha me parece um pouco melhor, mas não cheguei a usá-las.
Até mais!
Exatamente o mesmo ponto de vista que eu tenho, jQuery é para projetos simples, já que é um biblioteca simples.
Mootools para projetos que precisam de uma programação mais pesada.
Parabéns pelo artigo júlio.
ps: Esse seletor css do jQuery mata a pau!
Mootools é animal, muito poderoso, torna o Javascript uma linguagem de verdade. Realmente criar HTML com um monte de “new Element” não dá mesmo. Minha solução está sendo mandar HTML pronto do servidor para ser só modificado no cliente. A versão 1.2 do Mootools é outros 500, está muito boa. Não conheço JQuery
Muito bem feito o artigo Julio. Bem equilibrado e me ajudou a entender melhor a diferença entre elas. Já estou tranquilo com o jQuery então acho que vou me aventurar no Mootools.
Amigo… ao entrar no seu site com o IE tive problemas com uma tela dizendo que eu usava o IE 6.0… que eu estava perdido e tal.. até a barba mandou eu fazer huaahuahua
sinto em lhe informar que uso o IE 8.0…
e sinto ainda mais em lhe informar que vc é um coco de programador…
arruma isso ae… poe mais um else la e permita o 8.0… tanso…
se vc apanha pra um browser.. acho melhor vc estudar mais… porq os programadores bons nao ficam pedindo para os outros trocarem os browser e sim fazer algo que atenda a todos…
ja ja vc estará pedindo para usarmos só monitores de 1024… fala sério cara.. volta pra escola…
abraco
Eu uso jquery no trabalho, não vou nem falar na parte de animações que é um lixo! Enfim tem vários bugs, tente limpar o click no dom, ele vai limpar os teus eventos que tem live. É muito bom ter tudo em um $, mas isso torna lento pra caramba.
Não sou nenhum xiita, mas a superioridade do mootools é incomparável, até porque não dá pra comparar um framework com um toolkit. Mas tem algumas coisas do jquery que realmente me agradam mais, mas nada que algumas linhas de código do mootools não resolvam isso.
@Christian: desculpa, mas o cara que fala que prototype é melhor que mootools ou até mesmo que jQuery deve ser designer. Já tentou compactar o código do Prototype? Dá erro… Nem a api do Google oferece ele compactado. Enfim, nem se compara.
@Dand: concordo plenamente com o Julio, sem IE6. Enfim não pode criticar o cara porque tu não sabe que hora ele escreveu isso, se tava cansado, enfim pode ter inúmeros fatores que podem ter levado a cometer um erro ou sei lá porque não vi o código. Bons programadores não fazem algo que funcione igual em todos os browsers, utilizam graceful degradation, bons programadores também não navegam na internet usando o IE. E eu por mim não daria suporte nenhum ao IE, estamos quase no HTML 5 e os “browsers” da Microsoft sequer tem suporte a CSS3, são lentos e possuem diversos bugs bizarros que só são arrumados engambiarrando as coisas. Bons programadores web não só sabem escrever um bom código eles vão além disso.