Quais são os benefícios do desenvolvimento nativo do JavaScript? [fechadas]

33

Dado o desenvolvimento mais simples do jQuery, quando comparado ao JavaScript nativo, o que faz as pessoas renunciarem a bibliotecas como o jQuery?

Isso ocorre porque o jQuery tem limitações ou é lento? Quero dizer, se o jQuery é tão fácil comparado ao javascript nativo, por que as pessoas ainda precisam usar o javascript puro?

Mike
fonte
1
O jQuery é apenas uma biblioteca - escrever JS nativo que usa o jQuery ainda está escrevendo JS nativo. É como perguntar: "Quais são os benefícios do desenvolvimento nativo de C ++?" quando você está falando sobre "desenvolvimento C ++ sem Boost".
Zach
2
vanilla-js.com
Daniel Little
1
O principal objetivo do jQuery e de outras bibliotecas antigas era criar uma fachada em cima de navegadores diferentes com interfaces js diferentes (por exemplo , XMLHttpRequestvs ActiveXObject, ou addEventListenervs attachEvent, ou css selectorsvs xpath selectorsvs no selector support, etc ...) Nos navegadores recentes, a maioria desses problemas não ocorre. existem, porque seguem os mesmos padrões.
Inf3rno 19/09/2014

Respostas:

89

Vamos conversar sobre carros.

Oh espere, nós já fizemos - lembra daquela vez que nos conhecemos, há algum tempo atrás? Nós conversamos sobre carros. Na verdade, você parecia ser um especialista em carros. Você foi capaz de explicar detalhadamente tudo o que é certo, errado e empolgante sobre a última corrida de Fórmula 1. Você sabia de cor todos os modelos da Lamborghini, incluindo preço e disponibilidade. Você até pensou em comprar seu próprio Ferrari 599 GTB Fiorano e estava economizando (aposto que o jantar do bife não ajudou muito).

Ao explicar as falhas da Toyota com uma voz ótima e excitada, você pulou de repente da cadeira e gritou no ar, agitando os punhos: "Droga, sou um magnífico especialista em todas as coisas relacionadas aos carros!" eu vou ser mecânico de automóveis! "

E assim você foi. Você teve uma entrevista, o Chefe ficou tão impressionado quanto eu com o seu conhecimento e você foi contratado. O primeiro cliente entrou. Sua embreagem estava quebrada. Você inspecionou e não sabia o que fazer. Por uma questão de fato, você não tinha absolutamente nenhuma idéia de como seguir os conselhos que o Chefe lhe deu. Você foi demitido.

Mas como pode ser isso!? Você sabe tudo sobre carros! Exceto por ... tudo sobre carros. Você pode muito bem saber que o carro dos seus sonhos tem um motor V12, mas não sabe o que isso realmente significa.

Então você não é um mecânico de automóveis - você é um entusiasta de automóveis. E até você aprender como os carros funcionam , você continuará sendo um entusiasta.

Agora deixe-me perguntar. Como $.fn.textfunciona? E que tal $.fn? O que eles realmente significam? Como $(something)retornar uma coisa gigantesca contendo coisas, e o que é exatamente essa coisa? Você pode replicar a funcionalidade deles, pelo menos um pouco, em teoria? Você consegue lidar sem o jQuery?

Dizer que "o JavaScript nativo é difícil" é apenas ... falso. Em primeiro lugar, porque o JavaScript como idioma não tem nada a ver com o DOM , que é principalmente o que o jQuery abstrai. Segundo, porque depois de aprender um pouco sobre o DOM, você já pode navegar pelos bugs mais comuns entre navegadores. Mas apenas um pequeno segredo - tudo é difícil no começo. A divisão longa era uma cadela na 5ª série.

Como uma segunda analogia para esta resposta: jQuery é JavaScript-DOM (não JavaScript a linguagem, apenas o DOM) como Array.prototype.forEaché for. Funciona em 99% dos casos. E isso funciona bem. Mas para esse 1% que não é coberto, você precisa saber como usar o forloop, mesmo que seja prático. Essa resposta inteira é baseada no lado "mais puro" da pergunta, e nem mesmo no lado técnico (tamanho da biblioteca, por exemplo, e várias outras coisas, conforme explicado na resposta de Michael Dorrant). Porque eu amo JavaScript e quando as pessoas simplesmente o deixam de lado casualmente dizendo "pah, esses javascript tolos" e agitando luvas brancas sofisticadas, tudo se resume à moralidade.

Se você pode aceitar o fato de que sempre será um entusiasta do JavaScript, quem sou eu para impedi-lo? Mas se você quer ser um programador JavaScript, primeiro precisa ter o conhecimento necessário para escolher pelo menos entre usar o jQuery (ou qualquer outra biblioteca) e não usar uma biblioteca. Aprenda o DOM. Aprenda como usá-lo. Escreva sua própria pequena biblioteca ou apenas uma coleção de funções auxiliares. E uma vez que você conhece o DOM e escolhe usar o jQuery - velocidade divina. A preguiça é concedida para aqueles que trabalharam duro.

Zirak
fonte
15
Divisão longa ainda é difícil!
Raynos
13
@anonymousDownvoter Ore para explicar. É porque você é vegetariano? Eu posso mudar o bife em tofu-burger, mas não pode dizer honestamente que não há tal coisa como um "grande tofu-burger"
Zirak
10
+1 "Como $ (algo) retorna uma coisa gigantesca contendo coisas, e o que é exatamente isso?" Hah!
ThinkingStiff
3
Além disso, @ Mike é criminoso, isso nunca recebeu um status de resposta porque é puro! @ # $ Ing gênio.
Erik Reppen
5
"ótimo bife" no post é um erro de digitação voluntário, não tente editá-lo. Se necessário, consulte esta discussão meta nisso
mosquito
12

Razões que eu sei:

  1. Quando a necessidade for extremamente mínima, diga 1 clique.

  2. Quando a velocidade do download é crítica e a biblioteca jQuery é muito grande E você não precisa escrever muito código (personalizado) para substituí-lo.

  3. Ao integrar com outras tecnologias, às vezes js brutos é melhor.

  4. Ao trabalhar em um sistema legado (aka 'produção') já escrito em js com padrões estabelecidos.

Michael Durrant
fonte
13
Eu me pergunto quantas vezes o número 2 realmente é verdade. Você salva um download potencialmente em cache de 92K, mas acaba escrevendo muito mais código JS padrão.
Adam Rackis
4
Eu não sei disso. Você pode manter o JS conforme o necessário , em vez de incluir a biblioteca inteira para um subconjunto da funcionalidade.
Ryan Kinal
4
@Ryan Kinal - Adam Rackis tem um bom argumento, e se você usar a API do Google para carregar o Jquery, poderá carregá-lo no mesmo local em que o usuário provavelmente já o recuperou.
Ben DeMott
Eu discordo do # 4. Se o código legado for horrível e todos da equipe concordarem, é uma boa ideia adicionar o jQuery e usá-lo no código futuro.
ThiefMaster 28/06/2012
7

O jQuery é simplesmente uma estrutura - um conjunto de ferramentas escritas em JavaScript. Ao usar esse conjunto de ferramentas, você ainda está usando JavaScript. Algumas pessoas preferem escrever JavaScript usando as ferramentas fornecidas pelo jQuery, algumas optam por não, outras escolhem outros conjuntos de ferramentas.

Alguns motivos pelos quais você pode escrever JavaScript "puro" sem o jQuery:

  • As páginas são carregadas mais rapidamente sem incluir arquivos jQuery extras
  • Algumas estruturas podem ser incompatíveis com o jQuery
  • O código que está sendo escrito não faz nada com o que o jQuery ajuda
  • O código está sendo escrito para outras pessoas usarem, e exigir o jQuery como dependência tornaria o compartilhamento mais difícil
  • O autor do código deseja mais controle do que o jQuery fornece
user41718
fonte
5

O jQuery, como qualquer biblioteca ou estrutura, adiciona outra camada de bugs . Adoro isso, mas também perdi um dia procurando um bug que acabou por estar no núcleo do jQuery e não no meu código (uma ocasião rara, mas não tão rara).

Fora isso, não encontro outro motivo para não usá-lo:

  • A sobrecarga é mínima, especialmente se você optar pela versão hospedada do Google ,
  • Ajuda desenvolvedores de Javascript menos experientes a escrever código mais limpo e eficiente,
  • É principalmente entre plataformas, o que pode salvar vidas quando você precisa lidar com navegadores mais antigos,
  • A enorme galeria de plugins me ajuda a escrever protótipos em tempos muito curtos,
  • O DOM faz sentido,
  • blá blá blá...

MAS nunca deve ser usado como um substituto do conhecimento de Javascript. Se você não souber como fazê-lo em Javascript puro, poderá se safar inicialmente de uma biblioteca, mas, a longo prazo, pagará por isso.

E é claro que todos nós estamos travados em combate mortal com o IE6 há alguns anos, e não vamos facilmente largar nossos truques da velha escola em favor de um novo brinquedo brilhante.

yannis
fonte
2
Você usa plugins jQuery? A maioria deles não é horrivelmente cheia de códigos lentos e ruins?
Raynos
@ Raynos The huge gallery of plugins help me write prototypes in very short times... Apenas protótipos, evito-os no código de produção quando possível. Existem alguns plugins com excelente código é claro, mas você tem que olhar muito difícil para eles ...
yannis
protótipos geralmente significa "deveria ter sido descartável, mas agora é um código de produção". Se você usá-los em protótipos descartáveis, tudo bem.
Raynos
A @Raynos Prototipagem não se refere apenas a protótipos descartáveis. Prototipação evolucionária é um processo básico de desenvolvimento web ... - como é que, para uma resposta tardia: P
yannis
A "prototipagem evolucionária" é chamada de "cortar enormes cantos agora e espero que possamos ganhar mais com isso do que o custo de toda essa dívida de código que obteremos". O que, é claro, só é válido se os custos de corte chegarem nessa mágica janela de tempo necessária para que sua empresa se torne um sucesso. É um empréstimo.
Raynos 22/01/12
5

No ambiente do navegador, você precisa de uma ferramenta de normalização entre navegadores. Essa ferramenta vem em dois sabores

  • envolve objetos de host com novos objetos que se comportam da mesma maneira nos navegadores
  • estender objetos de host para implementar a API do DOM.

Geralmente, você pode usar esses utilitários de uma das três maneiras

  • use pequenas funções como addClassou em setTexttodo o seu código quando e onde você precisar delas
  • escreva sua própria biblioteca de normalização entre navegadores
  • use um existente.

Você precisa de algum mecanismo de normalização, caso contrário, obtém zero suporte a vários navegadores.

Quanto ao uso de um existente, tudo bem. Eu apenas não usaria jQuery. Pessoalmente, atualmente estou escrevendo minha própria biblioteca (o DOM-shim corrige os navegadores sem expor uma API proprietária estrangeira. Transforma seus navegadores em um único navegador padronizado e bem comportado).

Raynos
fonte
3

Se você não precisa de abstração do DOM, suporte a vários navegadores e legados - você pode facilmente ficar sem o jQuery.

É o caso de você estar desenvolvendo extensões de navegador, scripts greasemonkey (às vezes), itens de processamento de números, desenvolvendo para Node.js. ou outros ambientes que não sejam de navegador.

c69
fonte
2

Juntamente com as outras respostas aqui, especialmente as de Michael Durrant , eu percebi que a velocidade é uma das principais razões para eu ocasionalmente optar por usar JavaScript bruto.

Ultimamente, tenho trabalhado em muitas animações ou outras tarefas que exigem muita CPU e, algumas vezes, o JavaScript bruto é muito, muito mais rápido do que se eu passasse pelo jQuery.

Um exemplo é onde eu queria alterar a opacidade de um position: fixedelemento em relação à distância em que uma página rolava um usuário. O efeito foi muito lento quando usei o jQuery para fazer isso, fazendo com que a rolagem ficasse irregular e o efeito de desbotamento fosse arruinado. Eu mudei para o uso de JavaScript direto e tudo estava suave como seda, exceto no IE <= 8.

rosquinha
fonte
2

Preciso preceder minha resposta com alguma honestidade aberta. Eu amo jQuery. Isso facilita enormemente minha vida e torna o código JavaScript mais declarativo, e é assim que acredito que as coisas devem funcionar.

O jQuery faz muitas coisas ...

Sim, você pode adicionar plugins
Sim, você pode estender os seletores
Sim , simplifica a animação

mas o jQuery não faz tudo

Você já tentou trabalhar em vários contextos de janela com o jQuery? O jQuery é péssimo ao lidar com diferentes contextos de janela, porque retém o original windowe o documentcontexto da janela em que foi chamado.

Eu escrevi um código aqui e ali para criar pop-ups *, e o jQuery pode simplesmente atrapalhar o que estou tentando realizar. A adição de uma nova referência ao jQuery na janela filho geralmente pode piorar as coisas, dificultando a identificação de qual contexto do jQuery está sendo usado.

* pense na pop-up do Gmail para compor um email em uma nova janela, não publicidade com spam

Use-o quando simplificar o código

O momento de usar o jQuery é quando você pode tornar seu código mais simples, mais curto, mais legível e mais rápido.

O momento de não usar o jQuery é quando ele não torna seu código mais simples, mais curto, mais legível ou mais rápido. Se você precisar ajustar os tempos de carregamento, pode não querer usar o jQuery devido à sobrecarga do evento.

zzzzBov
fonte
2

Como você deve saber, o jQuery é uma estrutura de uso geral que fornece muitos métodos que muitos de nós não usamos em nossos projetos. (Alguns deles eu ainda não usei.)

Há duas razões principais para não usar o jQuery ou outras estruturas bem estabelecidas.

1. O projeto não é grande ou complexo o suficiente para usar essa estrutura: nesse caso, o codificador toma uma decisão informada com base em sua experiência e conhecimento em JavaScript. Isso o ajudará a reduzir o peso da página e também mais controle sobre o código.

2. O codificador desenvolve sua própria estrutura . Vi um projeto em minha empresa que possui sua própria estrutura JavaScript. A razão pela qual eles citam é que, se eles estão usando jQuery e há algum bug para corrigir, eles precisam esperar até a próxima versão. Além disso, se houver um recurso a ser adicionado, eles precisam solicitar à equipe do jQuery ou adicionar um plug-in, mesmo que torná-lo um plug-in não seja uma boa idéia (eles deram o exemplo de ter usado .livealgo semelhante em seus mesmo antes de ser oficialmente adicionado ao JQuery). Ter sua própria estrutura fornece mais controle ao código. A desvantagem é que você precisa reinventar a roda em relação a problemas de compatibilidade do navegador etc. Além disso, se o processo de desenvolvimento não for bom, sua estrutura inchará e aumentará o tempo para mantê-la.

Shree
fonte
0

Mike

Acho que as pessoas se opõem ao uso de algumas bibliotecas devido à dependência dessa solução de infraestrutura / biblioteca para executar alguma tarefa.

Mas tenhamos cuidado para lembrar que as línguas vêm e vão como bibliotecas a longo prazo.

Então talvez seja o escopo temporal. Talvez as pessoas hesitem em investir em uma biblioteca que talvez não esteja lá - ou que tenham tanto impulso a longo prazo.

Eu mesmo? Não tenho objeção a usar o JQuery em particular. Também olho para o exemplo Box2d.js ou three.js e preferiria adotá-los mesmo que a vida útil a curto prazo do que perder os frutos que eles têm a oferecer.

Mike bottom line é que existe um risco no prazo de validade de uma biblioteca que você escolher, e acho que alguns membros da comunidade javascript podem ter sofrido perdas devido a uma biblioteca ou projeto chegando ao fim, e podem ter acabado de dizer - nunca mais.

Tim Miltz
fonte
0

Eu diria que a questão principal é que mais e mais pessoas (a grande maioria?) Não sabem mais como codificar em JavaScript. Se o jQuery não pode fazer algo, eles não podem fazê-lo.

Está chegando ao ponto em que exemplos simples de javascript estão se tornando difíceis de encontrar. Nada contra o jQuery; é uma ótima estrutura. Eu tive muitas boas idéias com isso, mas as pessoas deveriam aprender JavaScript primeiro e depois aprender uma estrutura. Pessoalmente, acho minha estrutura mais flexível e melhor se adapta às minhas necessidades, e sim, às vezes, reinvento a roda, mas o controle total e o controle sobre as correções de bugs é um grande benefício, desde que você esteja disposto a colocar o trabalho em aprender JavaScript.

Não apenas isso. Conhecer o JavaScript básico torna muito mais divertido brincar e experimentar os novos recursos, em vez de esperar por uma implementação baseada em estrutura. Além disso, eu não culpo o jQuery por isso, pois é principalmente uma biblioteca DOM , mas pode ser difícil escalar em grandes projetos. Outras estruturas fazem um trabalho melhor nisso; Protótipo vem à mente.

Em suma, é uma ótima estrutura, mas não o objetivo final de todas as pessoas.

Geofftop Ozzymondias
fonte
2
Sua resposta seria mais forte se fosse menos divertida e focada mais em detalhes.
é difícil ler este post (parede de texto). Você se importaria de editá -lo em uma forma melhor?
gnat
0

Posso acrescentar mais dois motivos que não foram mencionados:

  1. Quando escolho novas tecnologias, muitas vezes, eu começava com construções de nível inferior antes de passar para construções de nível superior. Sou basicamente um desenvolvedor de C ++ / C #, mas há pouco tempo quando comecei a brincar com HTML / CSS / JavaScript, optei por não usar nenhuma estrutura, porque queria entender primeiro a tecnologia (ou seja, o JavaScript própria linguagem) sobre a qual essas estruturas são construídas.

    • Dito isto, descobri o jQuery e nunca mais gostaria de voltar a codificar manualmente o que o jQuery pode fazer por você em uma ou duas linhas de código.
  2. Eu não sei o quão comum isso é, mas para mim parece que há muitas pessoas que, quando veem a próxima estrutura / tecnologia / linguagem, sua primeira resposta é: "não é outra API para eu aprender!" Eles não se importam com o quão fácil é o jQuery, mas simplesmente o vêem no caminho entre eles e entregando trabalho usando seus métodos "verdadeiros e experimentados". Essa é a mesma categoria de pessoas que se recusam a usar a biblioteca Boost ou qualquer outra da STL e continuam a usar o malloc para praticamente tudo. Você perguntou por que eles selecionam JavaScript puro em vez do jQuery e, na realidade, nunca fizeram a escolha porque, na maioria das vezes, se recusaram a avaliar o jQuery e estão perfeitamente satisfeitos com o atual ritmo de desenvolvimento, por mais lento que seja.

DXM
fonte
1
As pessoas escolhem o JavaScript puro sobre o jQuery porque o jQuery é uma horrível camada de abstração que não é necessária.
Raynos
Claro que é, ele se esconde diferenças entre os navegadores e isso é uma grande coisa por si só
Kos
@ Raynos: Na verdade, não sou especialista em tecnologia da Web e sou um amador, por isso não posso defender o jQuery. Mas pelo pouco que vi, tem sido muito bom para mim. O jQuery adiciona outra ferramenta à sua caixa de ferramentas. Você pode usá-lo o quanto quiser. Isso nunca impediu que você escrevesse Javascript puro quando necessário. Ao mesmo tempo, há coisas que ele pode realizar com poucas linhas de código que levarão dias para você escrever; portanto, se funcionar, use essas duas linhas. Caso contrário, role o seu. Para dizer a coisa toda é horrível é como comprar uma chave de fenda e, em seguida, reclamando que ele é um ...
DXM
... ferramenta horrível martelo unhas com porque o identificador não tem peso suficiente
DXM
1
Você não precisa de jQuery . Os navegadores têm essa API chamada DOM, que permite fazer tudo o que você deseja. Problemas entre navegadores podem ser resolvidos usando polyfills. O jQuery é uma biblioteca medíocre e uma solução medíocre para o suporte a navegadores herdados.
Raynos
-1

jQuery é uma biblioteca escrita em e para JavaScript. A idéia é simplificar todas as coisas difíceis / tediosas do JavaScript, acelerando o tempo de desenvolvimento e aumentando a probabilidade de seus scripts funcionarem em vários navegadores.

O que torna o jQuery preferível usar:

  • Rápido
  • Biblioteca JavaScript leve
  • Compatível com CSS 3
  • Suporta muitos navegadores.
  • A estrutura do jQuery é extensível e lida com manipulações DOM, CSS, Ajax , eventos e animações.

JavaScript é uma linguagem, enquanto o jQuery é uma biblioteca criada usando JavaScript.

Aqui estão os motivos que tornam o JavaScript preferível ao invés do jQuery:

  1. Ele carrega toda a biblioteca de scripts jQuery com a página. É uma desvantagem para o site de processamento de consultas rápido / em xixi.
  2. Às vezes, a estrutura do jQuery entra em colapso / entra em conflito com outras estruturas.
  3. Se você está escrevendo um código simples para selecionar um elemento e mostrar alter, o JavaScript nativo é muito melhor.
  4. Se as operações forem pequenas e executadas dentro de poucas linhas de código do JavaScript, não é bom usar o jQuery.

Devido a esses motivos, gosto de usar JavaScript para evitar a estrutura do jQuery. É muito melhor aprender JavaScript, dependendo da biblioteca ...

Mesmo se você quiser estendê-los, precisará escrever código em JavaScript. O que também é uma grande conversa. Os desenvolvedores ficam dependentes dessas bibliotecas, para ter controle sobre os projetos, o JavaScript é melhor do que usar estruturas.

Niranjan Singh
fonte
1
"lida muito bem com manipulações de DOM" LOL O QUE?
Incognito
obrigado @Incognito por me informar sobre isso .. Mas é muito melhor do que outras bibliotecas. keyframesandcode.com/resources/javascript/deconstructed
Niranjan Singh
1
O link está totalmente errado. O jQuery que suporta seletores psudo-css através do sizzle não tem nada a ver com o DOM.
Incognito
bem, está tudo bem .. mesmo eu aprendi com você sobre essas coisas .. você pode me dar qualquer link ou informação sobre essas coisas? Eu atualizei a resposta ..
Niranjan Singh
yuiblog.com/blog/2006/10/20/video-crockford-domtheory é um bom começo, então leia as especificações do w3c no DOM.
Incógnito
-4

Acho que as pessoas usam o jQuery porque é mais simples, mais fácil e mais poderoso, e porque as ajuda a esquecer o IE. Além disso, para funcionalidades personalizadas, as pessoas usam javascript. Tente consultar o DOC para obter mais detalhes


fonte