[color=white].[/color]
E aí pessoal, tudo bem?!
Eu sou Leonardo Dutra, brasileiro, carioca e apaixonado por desenvolvimento (depois da minha mulher, é claro). Apresento a vocês um projeto que venho fazendo com muita atenção, estudo e pesquisa já há pouco mais de 1 ano, nas horas vagas. O projeto se chama LEAF - Light and Extensible Apps Framework, em inglês para entendimento global - e sim, é um framework para JavaScript. Mas o objetivo do framework LEAF não é ter milhares de funcionalidades como é de se esperar das mais famosas bibliotecas e frameworks para JavaScript, mas resolver o que coloco como problemas para qualquer projeto do tipo. Simplicidade do código e, principalmente, performance.
Os projetos mais famosos pretendem sempre atender ao maior número de possibilidades, começam pequenos e vão crescendo… mais funções, mais “classes” e mais bytes a serem transferidos. Sim, elas são feitas de forma a manter o mínimo de tamanho pra tudo isso… mas a que custo?
Sabendo que o JavaScript é mais orientado a objeto que o Java (até null e funções são objeto e as “classes” são dinâmicas - prototypes), interpretado e loose (sem tipagem e com vários tipos construção com funções), é fácil compreender também que é uma linguagem lenta. O parser interpreta o JavaScript como ao HTML. Um processo lento e que faz com que animações e outras necessidades de RIAs (Rich Internet Apps) sejam de difícil produção, gerando quase sempre animações com flicks e travadas.
O JavaScript utiliza a API Document Object Model (DOM) para controlar o HTML com o princípio da orientação a objeto, e o DOM está presente na maioria dos navegadores e agentes de execução. Porém as implementações não são totalmente iguais e apesar da maioria das funções estarem de acordo, outras são a catástrofe de aplicações em que a compatibilidade é uma característica essencial. Os frameworks em JavaScript corrigem isso, mas não com um empenho carinhoso para obter a melhor performance possível, e isso é importante já que muita coisa é construída “em cima” destes frameworks. Isso levado a níveis maiores ajuda a depreciar a execução de aplicações ricas.
Criei um estrutura simples para o LEAF. Tão simples que o intellisense do Aptana Studio, que apesar de genial e moderno tem problemas para apresentar bibliotecas emaranhadas, apresenta a LEAF para facilitar a codificação sem necessidade de nenhum plugin. E essa construção acabou por funcionar muito bem também no Adobe Dreamweaver CS4 e no plugin JSEclipse, entre outros que não me recordo agora. O mais importante é que a estrutura simples corrige incompatibilidades (principalmente do IE 5.5+) mantendo o máximo de performance possível (isso deu um trabalho brutal, apesar de parecer simples. Centenas de testes e melhorias antes mesmo de levar ao Google Code).
Então, o LEAF é atualmente simples e com uma excelente estrutura de dados e organizacional. Usa o “javascript namespace” leaf e é nativamente identificada pelos melhores intellisenses pra JavaScript. Não há funções sobrecarregadas com diversos tipos de entrada e retorno, não será incluso seletor de CSS (recomendo o uso da MooTools, YASS ou Sizzle) e qualquer implementação de audio ou canvas será separada… ficando no pacote principal a já excelente correção de compatibilidade e a veloz manipulação de DOM, usando o ElementHandler. A maioria vai ver que à semântica foi dada um bom espaço ao custo de alguns poucos bytes a mais, isso deixa a LEAF muito parecida com a API nativa de flash para ActionScript 3 e com implementação Java. Nada de chains do tipo “$().border().background().bla bla bla”. É bonitinho, mas força você a olhar a referência para cada um dos métodos da cadeia (ou decorar), quais têm 1000 entradas, retornos e funcionamentos implícitos. Além de depreciar a performance isso atrasa o seu trabalho de desenvolvimento e faz seu gerente preparar as chuteiras. O intellisense já te agiliza muito, e ainda mais quando o ScriptDoc estiver pronto e deixando a referência ainda mais completa.
Dêem uma olhada no site do projeto, e se possível no código. Vai perceber que as funções apesar de pequenas têm o mínimo de tempos constantes e variáveis possíveis para um código ótimo e compatível. Afinal, ela terá de ser uma espécie de core para gadgets e apps, online ou para smartphones… e até outros frameworks. Ainda é alpha, mas fiz testes primários e avulsos, além de revisar e “benchmarkar”. Então você pode testar e usar em projetos pessoais, reportando os bugs pra que sejam corrigidos rapidamente. O uso comercial ainda não é recomendado enquanto não houver um alpha estável, mas é só uma recomendação.
Obrigado pela atenção, um abraço!
http://leaf.googlecode.com
[color=white].[/color]