Uber Anúncia Framework Open Source Fusion.js

O Uber lançou o Fusion.js, um “Framework Web universal” de código aberto. No anúncio, o engenheiro de software Uber Leo Horie explica que o Uber constrói centenas de aplicativos web, e com as tecnologias web mudando rapidamente e as melhores práticas em constante evolução, é um desafio ter centenas de engenheiros web alavancando recursos de linguagem modernos com a natureza dinâmica da plataforma web. O Fusion.js é a solução da Uber para esse problema.

Na avaliação de estruturas, é crucial entender seus objetivos e objetivos para determinar se uma estrutura é adequada para a criação de um aplicativo. Horie explica que o Uber:

Precisava reformular seu antigo framework web monolítico para algo que atendesse aos desafios impostos pelos longos anos de endividamento técnico. No entanto, também queríamos permitir que os engenheiros continuassem usando as tecnologias que eles adoram (por exemplo, React e Redux), mantendo a compatibilidade com a infraestrutura de monitoramento de integridade do aplicativo da Uber.

Para atingir esse objetivo, o Fusion.js aborda os pontos problemáticos identificados pela equipe do Uber:

  • Configuração e templates encontrados ao usar muitas ferramentas para renderização no lado do servidor, divisão de código e recarregamento de módulos.
  • Desafios ao abstrair aspectos da renderização do lado do servidor.
  • Acoplamento de grandes bases de código.
  • Testes quando ocorrem efeitos colaterais.
  • Inflexibilidade geral com estruturas monolíticas.

A equipe da Uber encontrou desafios ao tentar fazer as coisas funcionarem com as soluções existentes, bem como desafios com a internacionalização da integração e outros recursos necessários. Houve também um objetivo principal para evitar abordagens monolíticas ao Fusion.js para manter os tamanhos dos pacotes pequenos.

Horie recomenda o Fusion.js para engenheiros que desejam:

Uma estrutura JavaScript licenciada pelo MIT que suporta bibliotecas populares como React e Redux, e vem com recursos modernos como recarga de módulo, renderização do lado do servidor com reconhecimento de dados e suporte a divisão de pacote.

Uma ênfase significativa é colocada nos aplicativos Fusion.js por serem universais e baseados em plugins. Os aplicativos Fusion.js possuem um único arquivo de ponto de entrada, possibilitando a reutilização de código no servidor e no cliente. Os plugins do Fusion.js são universais, facilitando para os desenvolvedores obter benefícios semelhantes.

Além do React e do Redux, o Fusion.js utiliza o Flow para digitar e o Koa para gerenciamento de middleware. Além de suportar ferramentas de teste como Jest, Enzyme e Puppeteer, o Fusion.js fornece ferramentas para desenvolvedores testarem plugins com o pacote fusion-test-utils.

A arquitetura de plugins e o desejo de evitar uma arquitetura monolítica são um pouco contrários à tendência recente do JavaScript de avançar para monopacks. Com a ampla adoção de módulos ES e ferramentas como o webpack para lidar com a divisão de código, ficou muito mais fácil reduzir os tamanhos dos pacotes sem precisar manter todos os pacotes separados. No entanto, a ênfase da Uber em tamanhos pequenos de pacotes é uma resposta direta aos desafios que a organização de engenharia enfrentou na criação de aplicativos da Web complexos.

O feedback público inicial do projeto é misto, com alguns engenheiros questionando o uso do Flow sobre o TypeScript e alguns se perguntando por que há necessidade de outro framework. É muito cedo para dizer se o Fusion.js ganhará tração fora do Uber, mas é encorajador ver as organizações lançarem uma infraestrutura que consideram benéfica.

O Fusion.js está disponível sob a licença MIT. Contribuições são incentivadas via GitHub.

Fonte: