Logo

dev-resources.site

for different kinds of informations.

Como eu estruturo meus projetos vanilla JS

Published at
12/3/2023
Categories
javascript
programming
portugues
Author
dougsource
Categories
3 categories in total
javascript
open
programming
open
portugues
open
Author
10 person written this
dougsource
open
Como eu estruturo meus projetos vanilla JS

Nota: apenas traduzi o texto abaixo e postei aqui.

Uma das perguntas que recebo com frequência é como estruturo e organizo meus projetos vanilla JS. Hoje vou mostrar como.

Estrutura dentro de um script

A primeira coisa que faço com qualquer script novo é encapsular ele em uma function para mantê-lo fora do escopo global.

Se for algo que desejo executar explicitamente mais tarde ou em um horário específico, envolvo-o em uma named function que posso chamar mais tarde.

var myScript = function () {
    // Algum código bonito...
};

// Mais tarde...
myScript();
Enter fullscreen mode Exit fullscreen mode

Caso contrário, eu encapsulo ela em uma Immediately Invoked Function Expression, ou IIFE.

(function () {
    // Algum código bonito...
})();
Enter fullscreen mode Exit fullscreen mode

Dentro do meu script, divido meu código em três seções distintas:

  • Variáveis
  • Métodos
  • inicializações e event listeners

Isso ajuda a manter meu código previsível e organizado.

(function () {
    //
    // Variáveis
    //
    var elem = document.querySelector('#app');


    //
    // Métodos
    //
    var handleClicks = function (event) {
        console.log(event.target);
    };


    //
    // Inicializações & Event Listeners
    //
    elem.addEventListener('click', handleClicks);
})();
Enter fullscreen mode Exit fullscreen mode

Código Modular

Muitas pessoas presumem que, como não uso frameworks e module bundlers, mantenho todo o meu código em um arquivo JavaScript gigante.

Eu não. Isso seria uma loucura!

Tenho um diretório /js em meu projeto onde guardo todos os meus scripts individuais. Eu uso Gulp, um JavaScript task runner de linha de comando, para combinar arquivos (chamado concatenação) e minificar eles.

Aqui está meu Gulp Boilerplate. Se você prefere GUIs ou simplesmente não se sente confortável com linha de comando (já não me sentia confortável há muito tempo), CodeKit e Prepros fazem a mesma coisa e são ambos muito bons.

Splitting de código

Eu não carrego apenas todos os scripts em todas as páginas.

No meu diretório /js, tenho alguns arquivos individuais e alguns subdiretórios. Quaisquer scripts que estejam dentro de uma pasta no meu diretório /js são concatenados em um arquivo com o nome dessa pasta. Arquivos individuais são minificados, mas mantidos separados.

Por exemplo, /js/main/mailchimp.js e /js/main/heading-links.js são combinados em main.js, enquanto /js/search.js é minificado, mas permanece search.js.

Meu arquivo main.js contém o código que uso em todas (ou na maioria) das páginas do meu site. Ele é carregado em todos os lugares.

Os outros arquivos individuais são normalmente usados em apenas uma ou duas "views". Eu uso loadJS() do Filament Group para carregar condicionalmente esses scripts apenas nas páginas que precisam deles.

É uma maneira superleve e fácil de "code-splitting" sem mexer com um module bundler complicado.

Tornando o JS inline

Quando se trata de desempenho na web, 14kb é um número mágico. Esse é o número aproximado de bytes em uma única HTTP request de ida e volta.

Servers enviam arquivos para o navegador em pequenos "packets", em vez de tudo de uma vez. Se você tiver um arquivo JavaScript de 20 KB, serão necessárias duas viagens de ida e volta para chegar ao navegador.

Quanto mais "round trips", mais lento será o site (geralmente falando).

Depois de "minifying" e "gzipping" meu código, meu JavaScript combinado de CSS, HTML e main.js para uma página típica em meus sites geralmente tem apenas 14 KB ou menos.

Se eu tornar inline meu CSS e JavaScript diretamente no HTML, isso significa que posso enviar a página inteira em uma única HTTP request e ela começará a ser renderizada imediatamente.

Se os arquivos combinados forem maiores que 14 KB, é melhor carregá-los externamente para que sejam armazenados em cache pelo navegador. Mas para mim, "inlining" é o motivo pelo qual meus sites parecem tão incrivelmente rápidos.

Fonte

Newsletter de Go Make Things

portugues Article's
30 articles in total
Favicon
Validação e Sanitização em Aplicações Web
Favicon
Golang básico - Comparação de Igualdade
Favicon
Guia de React re-render: tudo, tudo de uma vez
Favicon
Go + hot reload
Favicon
Como animar o scrolling para anchor links com CSS
Favicon
Como criar uma sticky navigation apenas com CSS
Favicon
Como usar requestAnimationFrame() com vanilla JS
Favicon
Como atualizar a URL do navegador sem refresh a página usando a vanilla JS History API
Favicon
Por que utilizar um elemento form quando submit campos com JavaScript?
Favicon
Quando um framework é melhor que a manipulação nativa do DOM
Favicon
Recursão com vanilla JavaScript
Favicon
Como usar async e await com vanilla JavaScript
Favicon
Construindo um show/hide disclosure component acessível com vanilla JS
Favicon
Eu <3 cascade!
Favicon
Você provavelmente não precisa de um DOMContentLoaded event em seu Javacript
Favicon
Formas de escrever Immediately Invoked Function Expression (IIFE) no JavaScript
Favicon
Event delegation e múltiplos seletores com vanilla JS
Favicon
Usando a propriedade CSS currentColor para contruir componentes extensíveis
Favicon
CurrentColor e SVGs
Favicon
WTF é gzipping (e como é diferente da minificação)?
Favicon
Como eu estruturo meus projetos vanilla JS
Favicon
Uma alternativa vanilla JS para o método moment.js timeFromNow()
Favicon
Recriando o método lodash partition() em vanilla JS
Favicon
Recriando o método lodash inRange() em vanilla JS
Favicon
Recriando o método lodash pull() em vanilla JS
Favicon
Como converter segundos para minutos e horas em vanila JS
Favicon
Gerando números randômicos com vanila JS
Favicon
Obtendo os meses formatados com vanila JS
Favicon
Como ser um desenvolvedor mais produtivo
Favicon
Como construir um site que carregue em menos de um segundo

Featured ones: