Por que os navegadores não têm o jQuery instalado?


19

Estou usando o jQuery em vários dos meus sites e, embora eu use uma CDN para servi-lo, simplesmente não faz sentido para o visitante baixar o jQuery a cada vez. O jQuery deve ser a estrutura JavaScript mais amplamente usada no mundo - não faria mais sentido se os navegadores apenas o instalassem por padrão?

Dessa forma, milhões de vezes por dia, um download do jQuery poderia ser impedido. Ou nos sites das próprias pessoas ou nas CDNs.

Tudo o que seria realmente necessário é algum tipo de declaração if como:

 <!--[if jQuery gt 11]>

Existe algo que me ajudará a impedir que os usuários façam a viagem para a CDN se eles já tiverem o jQuery no cache de outro site?


3
a pergunta é: por que um usuário precisa fazer novos downloads de sites ou CDNs para algo que ele já possui? O jQuery é servido em vários locais e em várias versões. Estou preocupado com a velocidade da página e os usuários estão preocupados com a largura de banda (especialmente móvel). Se existe um padrão-ouro para uma biblioteca - por que não usá-lo? Existem outros exemplos, com certeza, e eu também gostaria deles - desde que haja um padrão acordado para eles (como um número de versão).
User1914292

27
Por que jQuery, mas não Angular, MooTools, Underscore, ...? E quais versões de cada um? Os navegadores devem conter cópias de todas as bibliotecas JavaScript já criadas?
user253751

15
"Desculpe, você não pode usar meu site até atualizar para uma versão 0.1 do seu navegador"
#


4
o armazenamento em cache é feito para isso. caso contrário, a manipulação versão seria basicamente impossível
njzk2

Respostas:


55

Se você servir o jQuery a partir de uma CDN popular, como as Bibliotecas hospedadas do Google ou o cdnjs , ele não será baixado novamente se o visitante estiver em um site que o referenciou da mesma fonte (desde que a versão em cache não tenha expirado).

O jQuery é uma biblioteca popular, exatamente como você diz, mas é provável que não seja possível agrupá-lo no navegador por alguns motivos:

  1. O jQuery é relativamente pequeno (comparado às bibliotecas que às vezes estão incluídas nos navegadores, como o Flash). É improvável que os maiores gargalos de desempenho no site médio sejam causados ​​pelo download do jQuery.
  2. Melhorias no JavaScript / ECMAScript significam que cada vez mais os desenvolvedores não precisam depender do jQuery. (Consulte youmightnotneedjquery.com .)
  3. Existem muitas outras bibliotecas JavaScript populares. Os navegadores não são projetados como repositórios para o código JavaScript. Controlar a popularidade dos scripts, descartar as bibliotecas menos populares e manter tudo atualizado pode ser deixado para os desenvolvedores da Web de sites individuais.

Entendo isso, mas agora estou usando o code.jquery.com como CDN. No entanto, quando outro site usa googleapis ou cdjns, o navegador novamente faz o download do jQuery dessa outra CDN. Isso simplesmente não faz sentido e custa muito tempo / largura de banda em todo o lugar. Se você acrescentar a isso que, na maioria dos casos, as pessoas gostariam de algo como jQuery1.7 +, fica ainda pior. Entendo o seu ponto de vista sobre os navegadores não serem repositórios, mas não poderíamos criar algum tipo de regra de 'cache de várias fontes'?
User1914292

24
@ user1914292 Isso seria útil apenas se todos os navegadores tivessem todas as versões do jQuery existentes e se interceptasse solicitações a qualquer fonte conhecida do jQuery, substituindo-o pela versão em cache. Se houver uma pequena diferença, isso poderá causar erros impossíveis de depurar. Isso é ainda mais agravado pelo fato de o cache da web funcionar e funcionar há décadas. Seu navegador não é a única coisa que armazena em cache essas solicitações de jQuery - muitos dos roteadores no caminho para o navegador fazem o mesmo. O problema foi resolvido há muito tempo, quando a largura de banda fez questão :)
Luaan

4) E se o código jquery em um site específico depender de uma função que foi fundamentalmente alterada em uma atualização recente e não fizer mais o que o código espera que ele faça?
Shadur 5/09/2015

1
@ Ejay não, ele não funciona como um mecanismo de rastreamento, porque 99% do tempo em que a solicitação é atendida no cache do navegador.
suriv

1
@BenSteward Sim, use as ferramentas de desenvolvimento do seu navegador e verifique o painel Rede . O Chrome, por exemplo, mostrará recursos em cache com "cache de disco" ou "cache de memória" na coluna "tamanho" e um valor fantasma na coluna "status" (contanto que você não tenha "Desativar cache (enquanto o DevTools está aberto) "ativo nas configurações das ferramentas de desenvolvimento). Pode depender dos cabeçalhos de controle de cache e de outros fatores sobre o que é armazenado em cache e por quanto tempo. developer.mozilla.org/pt-BR/docs/Web/HTTP/Caching
Nick

21

O jQuery não é apenas a única biblioteca JS popular, como um navegador poderia incluir várias versões. A CDN do Google atualmente lista: 42 versões do jQuery; 44 versões da interface do usuário do jQuery; 6 versões do jQuery Mobile.

É melhor permitir que os desenvolvedores da Web definam qual versão de uma biblioteca baixar com base nos requisitos de seus sites. Se você usa uma versão atual de produção do jQuery no seu site e carrega-a de uma CDN mais popular, é bem provável que seus visitantes já a tenham armazenado em cache de qualquer maneira.


14

O navegador é o motor, não é dever do projetista do motor descobrir que tipo de combustível e peças extras você colocará em seu carro e incluí-lo para você. Se eles fizessem isso, os navegadores seriam um enorme bloatware, porque a próxima pergunta será "por que apenas jQuery?" E acabaríamos mantendo repositórios de dependência.

Além disso, incluiremos todas as versões? E se alguém quiser usar uma versão personalizada? E se alguém não quiser usar essa biblioteca? Com que frequência eles mesclam e lançam os últimos lançamentos? Terminaremos com navegadores diferentes com jQuerys com versão diferente? Eles não podem nem implementar igualmente as funcionalidades padronizadas de HTML, CSS e JavaScript. E se um dos mantenedores do navegador não incluir uma biblioteca ou sua versão específica?

Os navegadores fornecem blocos de construção e um ambiente para você criar uma solução ainda não concluída.

Colocar o jQuery no navegador não tornará o site carregado incrivelmente rápido, porque hoje em dia esse não é o maior gargalo, no entanto, podemos concordar que o jQuery é uma biblioteca desnecessariamente grande, mas seu objetivo nunca era ser uma biblioteca rápida (considerando largura de banda). Existem muitas outras bibliotecas que foram projetadas especificamente para carregamento rápido e leves, como o Zepto .

Se você está realmente preocupado com o tamanho e uso da largura de banda do jQuery, não o use. Você já ouviu falar sobre o Vanilla JS ? É uma biblioteca ainda mais popular que é usada literalmente por quase todos, incluindo o próprio jQuery! E já realizou o seu sonho, porque está incluído em todos os navegadores!


2

Um motivo para usar uma biblioteca como o jQuery é a compatibilidade.

Os navegadores se tornaram mais compatíveis com os padrões, mas, usando a biblioteca jquery, você se fornece, não precisa se preocupar com as diferenças entre famílias e versões de navegadores

Fornecendo você mesmo o jquery, você tem certeza de ter uma API consistente.

Se tivermos o jquery embutido no navegador, você deverá verificar qual versão o usuário possui e voltaremos ao browserniffing e "Este site é melhor visualizado em ..."

Portanto, ter o jquery incorporado no navegador não faz sentido.

Além disso, o cache funciona, portanto, mesmo que o usuário ainda não tenha a sua versão do jquery, ele precisará ser baixado apenas uma vez.


-3

Na verdade, acho que os respondentes aqui não entendem que a resposta para a pergunta é que os navegadores provavelmente devem incluir as bibliotecas mais usadas, os polyfills etc. no lado do cliente.

Como declara a pessoa que faz a pergunta, os comentários condicionais podem ser usados ​​para garantir que aqueles que usam navegadores que não incluem jquery recebam uma versão apropriada.

O Jquery também inclui seu próprio suporte à compatibilidade com versões anteriores através da migração, permitindo comentários condicionais para dar suporte retroativo a alguém com uma versão empacotada de uma biblioteca jquery mais antiga sem fazer o download de uma nova biblioteca.

O argumento para incluí-los nos navegadores não seria apenas sobre a experiência e o custo do usuário, mas também sobre o planeta em que vivemos. O uso de dados é uma grande contribuição para a poluição global e garantir que a transferência desnecessária de dados seja minimizada pode ter um efeito dramático em nossa pegada de carbono.

Essencialmente, com o objetivo de adicionar alguns megabytes adicionais de inchaço de código em um navegador compactado - os mesmos dados estão sendo desnecessariamente transportados bilhões de vezes por dia.

Isso piora a experiência do usuário para todos na internet. E custa às grandes empresas enormes quantias de dinheiro.

Como desenvolvedor, você apenas criaria os fallbacks necessários, como fazemos atualmente para o IE etc., então qual é o problema - provavelmente deve ser incluído com certeza?


1
Isso é tangencial à questão. A questão é "por que não os navegadores e o que posso fazer sobre isso", não "por que os navegadores deveriam".
Stephen Ostermiller

O OP, enquanto pondera seu ponto, está interessado em reduzir o tráfego para a CDN se a estrutura já existir no cache do navegador, possivelmente até em outro site. Pessoalmente, não consigo ver como, a menos que haja uma maneira comum de fazer referência à estrutura.
Closetnoc

A maioria das pessoas falhou em dizer também a resposta mais relevante para a pergunta, ou seja, o jQuery não é um padrão da Web e os navegadores executam apenas padrões da Web que mudam lentamente e são baseados em fundamentos. O jQuery foi originalmente criado para fazer os fundamentos funcionarem de maneira consistente entre os navegadores. Portanto, incluir o jQuery é como incluir um patch para corrigir navegadores, mas os navegadores já se corrigem eventualmente. Já vemos o uso reduzido do jQuery como parcialmente evidenciado pelos muitos artigos "Você não precisa do jQuery" nos dias de hoje.
30717 Rob

Stephen. O quesiton não é "por que não navegadores, e o que posso fazer sobre isso". Essa é a sua repetição. A questão é por que não, e a pessoa que pergunta afirma claramente que simplesmente fazer isso e criar uma nova estrutura para lidar com os problemas que surjam traria realmente um enorme benefício potencial para todos os usuários da web.
Andy Bbop

Todos vocês precisam parar de defender seus preconceitos obsoletos e aceitar que ainda podem aprender. Ah, e também aprenda a ler alguma coisa. #Weapons. "O OP, enquanto pondera seu ponto, está interessado em reduzir o tráfego para a CDN". Não, ele diz que isso poderia economizar muito em largura de banda, seja no lado do cliente ou na CDN. Leia o post effing.
Andy Bbop
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.