É melhor colocar o código JS no arquivo html ou em um arquivo externo?


16

Se estou criando um site de uma página, é melhor criar um arquivo externo para o meu código JS ou apenas colocá-lo no código html? Colocá-lo na página é mais rápido para carregar? Posso alterar as permissões para negar as solicitações dos usuários para o código, mas a página html ainda pode chamar o código?

Respostas:


26

Você deve colocar seu código JS em um arquivo separado, pois isso facilita o teste e o desenvolvimento. A questão de como você serve o código é outra questão.

  • Servir o HTML e o JS separadamente tem a vantagem de um cliente poder armazenar em cache o JS. Isso exige que você envie cabeçalhos apropriados para que o cliente não emita uma nova solicitação a cada vez. O armazenamento em cache é problemático se você deseja executar uma atualização e, assim, invalidar os caches do cliente. Um método é incluir um número de versão no nome do arquivo, por exemplo /static/mylibrary-1.12.2.js.

    Se o JS estiver em um arquivo separado, você não poderá restringir o acesso a ele: É difícil (tecnicamente: impossível) saber se uma solicitação para um arquivo JS foi feita porque você o referenciou na sua página HTML ou porque alguém deseja fazer o download diretamente. No entanto, você pode usar cookies e se recusar a atender clientes que não transmitem determinados cookies (mas isso seria bobagem).

  • A veiculação da JS dentro do HTML aumenta o tamanho de cada página - mas isso é aceitável se for improvável que um cliente visualize várias páginas. Como o cliente não emite uma solicitação separada para o JS, essa estratégia carrega a página mais rapidamente - pelo menos pela primeira vez, mas há um ponto de equilíbrio em que o cache é melhor. Você pode incluir o JS, por exemplo, via PHP.

    Aqui, o cliente não precisa de acesso separado ao arquivo JS, que pode ser oculto, se você desejar. Mas qualquer um ainda pode visualizar o código JS dentro do HTML.

Outras estratégias para minimizar o tempo de carregamento incluem

  • Minificação JS, que reduz o tamanho do arquivo JS que você atende. Como a minificação ocorre apenas uma vez ao implantar o código, esse é um método muito eficiente para salvar bytes. OTOH, isso torna seu código mais difícil de entender para os visitantes interessados.

    Relacionada à minificação, está a prática de combinar todos os seus arquivos JS em um único arquivo. Isso reduz o número de solicitações necessárias.

  • Compactação, que adiciona uma sobrecarga computacional para cada solicitação no cliente e no servidor. No entanto, o tempo gasto (des-) compactando é geralmente menor que o tempo gasto na transmissão dos dados não compactados. A compactação geralmente é tratada de forma transparente pelo software do servidor.

Essas técnicas também se aplicam a outros recursos, como imagens.

  • As imagens podem ser incorporadas em HTML ou CSS com URLs de dados. Isso é prático apenas para imagens pequenas e simples, pois a codificação base64 aumenta o tamanho. Isso ainda pode ser mais rápido que outra solicitação.
  • Várias imagens pequenas (ícones, botões) podem ser combinadas em uma única imagem e depois extraídas como sprites.
  • As imagens podem ser reduzidas pelo servidor ao tamanho em que são realmente usadas no site, o que economiza largura de banda. Compare imagens em miniatura.
  • Para alguns gráficos, imagens baseadas em texto como SVG podem ser muito menores.

"Teste e desenvolvimento mais fáceis", não tenho certeza se é sempre útil ter JS em seu próprio arquivo para esse fim. Em um projeto, eu uso arquivos HTML muito pequenos, e na verdade é mais organizado para incluí-los no HTML. No que diz respeito ao cache, ele pode melhorar a velocidade de várias visitas (talvez), mas, para o carregamento da primeira página, sempre será mais rápido incluir o javascript diretamente no HTML.
YungGun

5

Estou criando um site de uma página

Se você literalmente tiver apenas uma página, então sim, é melhor (do ponto de vista do desempenho) servir tudo em um único arquivo ... folhas de estilo, JavaScript e até imagens (imagens pequenas alinhadas com URIs de dados). Isso elimina as solicitações HTTP adicionais necessárias para recuperar recursos externos que são relativamente lentos.

O arquivo resultante deve ser compactado antes da veiculação, o que reduzirá enormemente o tamanho da resposta de todo o texto.

Você ainda deve considerar imagens grandes externas à página, pois há limites para o tamanho dos URIs de dados e a compatibilidade do navegador. (por exemplo, o IE8 tem um limite de 32 KB, o que equivale a um tamanho real de arquivo de cerca de 23 KB devido à natureza da codificação base64.)

Posso alterar as permissões para negar as solicitações dos usuários para o código, mas a página html ainda pode chamar o código?

Não. Na melhor das hipóteses, o código pode ser ofuscado para "escondê-lo" do observador casual, mas não oferece proteção real.


1
Por que o voto negativo? Embora seja melhor para sites de desenvolvimento e páginas múltiplas ter arquivos externos / separados, o OP neste caso está perguntando especificamente sobre um "site de uma página" e se é "mais rápido para carregar". Minimizar solicitações HTTP deve ser uma prioridade nesta instância. Você pode (e deve) ainda desenvolver com vários arquivos, mas essa não é a pergunta que está sendo feita.
MrWhite

Ao colocar js, css e imagens em arquivos separados, você permite que o navegador armazene em cache os arquivos. Portanto, se o conteúdo da página mudar, apenas o html precisará ser recarregado.
Thierry J.

@ThierryJ. Ok, você pode armazenar em cache os arquivos, mas no carregamento da primeira página (o que é muito importante para adquirir novos usuários) ainda é muito mais rápido incluir todos os arquivos, pois o cache não está em vigor. Além disso, o computador ainda precisa carregar o arquivo em cache, uma etapa que será ignorada completamente se você incluir o arquivo no HTML. Provavelmente será mais rápido incluir o arquivo no HTML em quase todos os casos. Você precisará recarregar o HTML de qualquer maneira, e a parte do javascript não pode ser superior a cem kB, é insignificante.
YungGun 8/07/19

4

O código JS do lado do cliente deve ser visto pelo navegador (ou seja, se a página precisar usar JS diretamente) - isso significa que deve ser baixado pelo navegador.

Você não pode ter um navegador usando JS na página se não puder fazer o download.

A esse respeito, não faz muita diferença se você alinhar o JS ou colocá-lo em um arquivo, embora a prática comum seja usar um arquivo JS (separação de preocupações para um).

Se você possui um código que não deseja expor no navegador, precisará usar o código do lado do servidor (por exemplo, node.js, php, perl, asp.net, jsp - existem tantas opções) e interagir com ele do navegador - na página inicial carregada ou usando AJAX .


2

Bem, isso depende da quantidade de código e de quão sério você é sobre ser um programador / engenheiro de software versus apenas um codificador. Trabalhei com vários designers que colocavam pequenos trechos de código diretamente em HTML e, enquanto eu me encantava - ele realmente funcionava.

Embora não seja algo que eu faria, e se você quiser conhecer as melhores práticas de desenvolvimento de software, recomendo que você copie tudo em um *.jsarquivo externo e carregue-o por meio de <script>tags.

Em relação ao seu segundo ponto, não, você não pode negar ao usuário ou navegador para visualizar seu código, existe algo chamado obfuscationque tornará seu código mais difícil de ler, mas o desempenho será prejudicado.


1

é melhor criar um arquivo externo para o meu código JS ou apenas colocá-lo no código html?

É melhor criar um arquivo externo para o seu código JS. Também é melhor ter um ou dois arquivos que você serve para o cliente. Mas também é melhor dividir seu código JS em vários arquivos por questões de manutenção. Para poder fazer isso, você pode usar pré-processadores como o Gulp que combinarão seus diferentes arquivos JS em um arquivo.

Servir menos arquivos é melhor, pois o cliente terá menos solicitações HTTP para manipular.

Colocá-lo na página é mais rápido para carregar?

Sim, obviamente, é mais rápido, pois você faz apenas uma solicitação para o HTML, enquanto faz muitas solicitações (pelo menos 2) com seu código JS como externo. Isso é apenas se o seu código JS não for minificado em nenhum dos lados, e isso não levar em conta o quanto será mais difícil manter seu código, se estiver tudo em uma única página HTML.

Posso alterar as permissões para negar as solicitações dos usuários para o código, mas a página html ainda pode chamar o código?

Não, você não pode. Código JS, como código CSS e código HTML, é conteúdo estático. Isso significa que, uma vez no navegador, o cliente pode fazer o download completo e do conteúdo. Todos os arquivos, imagens e scripts estão abertos para download. Porém , você pode minificar / modificar seu código para que seja mais difícil para um ser humano usá-lo. Isso é apenas uma consequência da uglificação, que foi feita para o desempenho primeiro.


0

Muitos benefícios da separação do conteúdo html e javascript em arquivos separados:

  • aumenta a legibilidade de arquivos individuais
  • como o código javascript não está mais restrito a um arquivo html, os outros arquivos ou bibliotecas html e javascript podem usar seu código javascript
  • Da mesma forma, o código javascript colocado em um arquivo separado pode facilmente usar outros arquivos e bibliotecas avançadas para fazer cálculos complexos (aprendizado de máquina, gráficos 3D, estrutura, bibliotecas etc.)
  • o javascript pode ser armazenado em cache no lado do cliente e, com isso, apenas o conteúdo html precisa ser recarregado na atualização da página
  • as boas / modernas práticas de engenharia de software podem ser aplicadas com mais facilidade a um arquivo / módulo / biblioteca javascript separado (padrões de design, leia sobre typescript / babel etc.)
  • o código javascript pode ser facilmente ofuscado ou "oculto" dos visitantes da página por minificação / uglificação
  • arquivos javascript podem ser agrupados em um único arquivo / módulo através do gulp, webpack, etc.

1
este não parece oferecer nada substancial sobre pontos feitos e explicado em anteriores 6 respostas
mosquito
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.