Estruturas desaparecendo

Este post de sexta-feira é dedicado à tradução de um artigo interessante divulgado ontem no Medium . Decidi aprender um novo gênero de traduções para mim, por isso não chute muito se algo estiver errado em algum lugar. E, se possível, notifique sobre erros e erros de digitação no PM.

Obrigado e boa leitura!


Uma história de como os novos recursos da plataforma da Web e estruturas compiladas definem a próxima era do desenvolvimento da Web.



Foto: Stefan Bucher

Hoje, estruturas como Angular , React e Ember são essenciais para o desenvolvimento de aplicativos Web complexos. Na última década ( Angular foi lançado em 2010), o uso dessas estruturas se tornou o padrão de fato para muitos de nós. Eles nos ajudam a estruturar nosso código, gerenciar o estado dos aplicativos e criar interfaces complexas com base em componentes reutilizáveis.

No entanto, como você sabe, o JavaScript é o recurso da Web mais caro que afeta diretamente a interatividade de nossas páginas. E o tamanho do código JavaScript de nossos aplicativos da web é maior do que nunca. A página média da Web é maior que 3 MB, maior que o tamanho do jogo Doom original. Nós, como desenvolvedores, podemos ter Internet rápida e planos tarifários acessíveis, mas nossos usuários podem não ter tudo isso.

De acordo com Alex Russell , exceder o tamanho de apenas 130 KB para todos os nossos recursos pode significar que é impossível atingir o intervalo de download de 5 segundos em uma rede móvel e de telefonia padrão. No entanto, algumas de nossas estruturas favoritas podem demorar mais por conta própria.

Podemos usar as vantagens que as estruturas nos dão, mas ao mesmo tempo evitar inchar o código? Tem comodidade para o desenvolvedor e, ao mesmo tempo, uma excelente experiência do usuário? Eu acredito nisso. E acredito que estamos entrando em uma nova era de desenvolvimento web, que será determinada por isso ... Uma era na qual nossos quadros começarão a desaparecer.

Svelte


Um exemplo dessa tendência é Svelte , “a estrutura da interface do usuário que desaparece magicamente” (Artigo “A estrutura da interface do usuário que desaparece magicamente” em Habré - aprox.).

Svelte é uma estrutura de "tempo de compilação" que não possui um tempo de execução específico no cliente. Estamos acostumados a enviar grandes pacotes JavaScript para nossos usuários e esperamos que seus navegadores analisem e executem scripts. Mas Svelte não funciona assim. Em vez disso, ele compila seu aplicativo em pequenos módulos JavaScript independentes e independentes. Em outras palavras, quando o aplicativo for entregue aos seus usuários, o Svelte desaparecerá!

Um exemplo de aplicativo desenvolvido com o Svelte é o Pinafore , um cliente Mastodon PWA para a rede social descentralizada criada por Nolan Lawson, da Microsoft. O Pinafore mostra resultados muito rápidos no Teste de Página da Web e uma pontuação de 98 pontos no Lighthouse .


O Svelte , por si só, é muito minimalista, mas também existe o Sapper ( S Velte App Mak er - aprox.) - uma estrutura completa com base nela. Inspirado no Next.js, o Sapper inclui renderização no servidor, separação de código, estilos de escopo, roteamento declarativo e recarga a quente. Além disso, o modelo inicial do Sapper fornece o PWA por padrão, com um manifesto de aplicativo da web e um trabalhador de serviço com armazenamento em cache automático de recursos.

Perguntei a Nolan como ele se sentia ao usar Svelte e Sapper . Ele me disse que era um "sonho trabalhar com" Svelte . Sapper é "um pouco menos maduro" e teve alguns problemas com ele, mas também está satisfeito. Também comecei a usar essas duas estruturas para um novo projeto e, até agora, a combinação de funcionalidade e alta velocidade de operação realmente parece perfeita.

Estêncil


Svelte inspirou um projeto alternativo da Ionic: Stencil .



Novamente, o objetivo é adotar os "melhores conceitos das estruturas mais populares", mas ao mesmo tempo alcançar um melhor desempenho:

“Com ... estruturas tradicionais e técnicas de agregação, a equipe estava lutando para atender às demandas de latência e tamanho de código dos Progressive Web Apps que funcionavam igualmente bem em redes rápidas e lentas, em uma diversidade de plataformas e dispositivos.” - stenciljs.com

Para entender em que consiste o Stencil , encontrei uma introdução útil de Rob Bearman . Há também um vídeo de Maximilian . O resultado do Stencil é um componente da Web padrão (mais sobre os componentes da Web abaixo), não específico para o Stencil . Isso significa que você pode usá-lo em combinação com outra estrutura, se desejar (mas este artigo é sobre como as estruturas desaparecem, não se multiplicam!).

Separadamente, quero observar que, apesar do fato de a documentação do Svelte não prestar muita atenção nisso, o componente Svelte também pode ser compilado diretamente no Web Component ( aqui está um exemplo - se você definir customElement aqui - obtemos o resultado ). No entanto, Rich Harris , o criador de Svelte (e Rollup e muitas outras coisas incríveis!) Me disse que ele não achava que houvesse benefícios especiais no uso desse recurso no momento.

O estêncil também se parece com o polímero mais conhecido do Google, mas desaparece completamente na saída. No entanto, não usei muito o Polymer para comentar com mais detalhes. Talvez ele também mereça mais atenção. A terceira versão mais recente começou a usar os módulos ES (mais sobre isso abaixo), em vez de importações de HTML e npm em vez de Bower . Há também um PWA Starter Kit que recomenda Alex Russell como a melhor ferramenta para criar aplicativos Web produtivos. Ele fornece um padrão PRPL (envio, renderização, pré-cache, carregamento lento ) imediatamente.

Angular da próxima geração


Agradeço a Rich Harris por me informar que a Angular também está seguindo essa tendência! Os elementos angulares - uma inovação no Angular 6 - permitem exportar componentes angulares como componentes da Web de autoajuste. No momento, ele ainda requer uma "versão mínima e independente do Angular", mas eles "funcionam em elementos personalizados que podem ser usados ​​em aplicativos da Web criados com base em outras estruturas".

Além disso, Ivy é um renderizador de nova geração em Angular, projetado para reduzir drasticamente o tamanho do código resultante. (Embora ainda valha a pena dar uma olhada: no espírito de competição amigável, Rich fez uma comparação dos resultados de compilação dos componentes da Web de Svelte e Ivy!).

É muito legal que estruturas populares adotem essa abordagem, tornando seu código final também mais compacto. Esperamos que, à medida que mais e mais aplicativos da Web migrem para uma nova abordagem, isso tenha um grande impacto no desempenho da Internet como um todo.

Além disso, existem cada vez mais pré-requisitos para o fato de que em breve não precisaremos de estruturas. As estruturas podem, é claro, simplificar o desenvolvimento e continuar a fornecer complementos úteis, mas a própria plataforma da web oferece mais funcionalidades do que nunca ...

Plataforma da Web como estrutura


No meu artigo “A Rube Goldberg Machine” e na conversa subsequente, minha colega Ada Rose Cannon descreveu como as novas funções CSS e JavaScript podem ser “consideradas como estruturas incorporadas na plataforma da web”.

Por exemplo, CSS Custom Properties (mais conhecidas como CSS Variables) pode significar que você não precisa mais de um pré-compilador de CSS como o Sass . E o CSS Grid agora pode salvá-lo do carregamento do Bootstrap.

“Você não precisa de uma estrutura para usar o CSS Grid. CSS Grid é uma estrutura. ”
- Rachel Andrew

Componentes da Web


Os componentes da Web são particularmente fortes e são a chave para grande parte dessa tendência. Eles incluem os seguintes recursos - Elementos Personalizados, Shadow DOM e modelos HTML - ainda não estão disponíveis em todos os lugares , mas, como Ada diz , eles têm um suporte muito bom e existem polyfiles que oferecem suporte ainda melhor, para que você possa usá-los hoje!

Ada e Ruth John desenvolveram recentemente um aplicativo da web para visualizar músicas usando componentes da web e compartilharam suas lições .

Além disso, você pode se sentir mais seguro com novos recursos como o Web Components se usar a renderização no servidor (SSR) e implementar o lado do cliente com o Progressive Enhancement .

Minha preferência pessoal é criar uma ótima experiência de SSR e aprimorá-la para um aplicativo de página única.
- Canhão de Ada Rose

Módulos isomórficos de ES


Você também pode usar os módulos ES agora! Novamente, o suporte ao navegador é muito bom e você pode oferecer suporte a navegadores mais antigos usando o fallback "nomodule" .

De fato, se você concorda com a abordagem de aprimoramento progressivo do SSR +, pode usar os módulos ES sem precisar usar ferramentas de compilação para transpilar para outros navegadores, pois navegadores mais antigos ainda podem funcionar sem JavaScript. E usando o carregador de módulo ESM , também podemos usar módulos ES diretamente no NodeJS .

Isso é ótimo porque podemos reutilizar nossos scripts no front-end e no back-end (ou seja, "renderização isomórfica"), sem dançar com um pandeiro. Podemos estruturar nosso código de front-end sem precisar colar nossos scripts, colocar muitas tags de script em uma página ou usar carregadores do lado do cliente.

Foi exatamente isso que Ada demonstrou em sua primeira palestra no Twitch este mês. Há também uma entrada de blog com explicações.

Espero poder compartilhar meus pensamentos quando começarmos a entrar em uma nova era de desenvolvimento web. Uma era menos dependente das estruturas tradicionais da interface do usuário, bibliotecas CSS e empacotadores. Uma época em que enviamos menos bytes e carregamos nossos aplicativos da web mais rapidamente. A era das estruturas ameaçadas.

Obrigado a Nolan Lawson, Rich Harris e Ada Rose Cannon por sua ajuda e inspiração para este artigo. Este artigo também está publicado aqui no meu blog pessoal.

***


Por mim, quero observar que, infelizmente, no momento apenas eu em Habré escrevo sobre Svelte . Portanto, em russo há bastante informação sobre esse maravilhoso quadro.

Se você o conheceu pela primeira vez, pode estar interessado em ler outros artigos sobre este tópico:


Quem deseja monitorar ativamente seu desenvolvimento - bem-vindo ao canal de telegrama em russo SvelteJS . Teremos o maior prazer em vê-lo!

Parabéns a todos pelo verão e pelas vitórias de nossa equipe! Tenham um bom final de semana! Viva!

Source: https://habr.com/ru/post/pt414869/


All Articles