Onde o jQuery se encaixa com estruturas como JavaScriptMVC, BackboneJS, SproutCore e Knockout?

14

Uso o JQuery nos últimos 2 anos e tenho sido bem-sucedido ao criar algumas funcionalidades muito legais com ele ... por isso estou muito confortável com ele. Também acredito que o futuro da web continuará no caminho atual do lado do cliente.

Contudo...

O próximo desafio parece vir na forma de várias estruturas de controladores: KnockoutJS , BackboneJS , SproutCore , JavaScriptMVC (a lista continua).

Além disso, existem algumas ótimas ferramentas do AMD Loader para uso como RequireJS ou LabJS etc. No entanto, o jQuery agora possui recursos definee thenrecursos incorporados.

Está ficando cada vez mais difícil acompanhar tudo ...

E agora, minha tarefa parece ser avaliar / decidir sobre uma direção estratégica para o uso de alguma forma de uma estrutura MVC ou MVVM do lado do cliente ... mas eu tenho muitas perguntas.

  • Onde o JQuery se encaixa nas várias estruturas de controlador mencionadas acima?
  • O JQuery é usado ao lado de cada um ou alguns deles têm sua própria versão ' JQuery- styled version'?
  • São ferramentas como RequireJS que ainda é necessário se você implementar uma das várias controlador-estruturas acima mencionadas?
  • Os recursos definee thenincorporados ao JQuery agora substituem o AMD Loader mencionado acima?
  • Qual parece mais modular? (veja as notas abaixo)

OBSERVAÇÕES:
Uma coisa que eu não quero em nenhuma estrutura futura é o requisito de ter que absorver grandes quantidades de funcionalidades que não uso. Ou seja, eu prefiro usar uma estrutura que seja verdadeiramente modular. Por exemplo, para usar a interface do usuário do jQuery, é necessário incluir muitas outras bibliotecas principais que você pode não usar.

Eu estarei experimentando com cada um, mas algum feedback REAL seria ótimo. Eu já vi algumas perguntas 'semelhantes', mas nenhuma realmente respondeu à inclinação acima.

Desde já, obrigado!

Prisioneiro ZERO
fonte

Respostas:

11

jQuery uma ferramenta de normalização entre navegadores. Fornece o seguinte

  • Utilitários DOM
  • Sistema de eventos
  • Ajax
  • Animações
  • Utilitários ES5
  • alguma outra coisa

Backbone / knockout / yada / yada são bibliotecas do tipo MVC que existem para ajudá-lo a estruturar e escrever aplicativos modulares. Você só precisa deles se quiser a estrutura deles.

RequireJS / yada / yada são carregadores de módulos. Você precisa de alguma forma de carregador de módulos se quiser escrever um aplicativo modular.

Onde o JQuery se encaixa nas várias estruturas de controlador mencionadas acima?

Como mencionado, o jQuery normaliza os navegadores. estruturas de controlador não. Você não precisa do jQuery, mas precisa de uma maneira de normalizar os navegadores.

O JQuery é usado ao lado de cada um ou alguns deles têm sua própria 'versão com estilo JQuery' inserida?

O backbone / knockout / JavaScriptMVC não possui a normalização do navegador ativada; portanto, você precisa de uma ferramenta para isso. Não tenho certeza sobre o SproutCore que parece ter muito por aí.

Ainda são necessárias ferramentas como o RequireJS se você implementar uma das várias estruturas de controlador mencionadas acima?

Isso só é necessário se você escrever para escrever aplicativos modulares. Então, sim.

Existem três tipos de aplicações modulares

  • assíncrono requer carregadores como requireJS
  • sincronização requerem carregadores como modul8
  • usando namespaces e apenas incluindo arquivos
  • pacotes como ender

Os recursos de definição e, em seguida, incorporados ao JQuery agora substituem o AMD Loader mencionado acima?

Não. O recurso de definição incorporado ao jQuery permite usá-lo com um carregador AMD sem envolver o jQuery. Você ainda precisa de um carregador AMD. A capacidade "then" é apenas um pouco de açúcar adiado pelo jQuery.

Qual parece mais modular? (veja as notas abaixo)

Essa é uma pergunta opinativa. Minha opinião pessoal é que todas essas estruturas, incluindo jQuery, são inchadas e não modulares.

Você quer modular, escreva sua própria biblioteca, escreva sua própria arquitetura.

No entanto, se você quiser o menor dos males, eu escolheria a espinha dorsal porque é simples e pequena ou a coluna é semelhante

Raynos
fonte
Obrigado Raynos ... Posso sempre contar com você para uma ótima resposta!
Prisioneiro ZERO
@Marjan Estou esperando por outras pessoas que também possam se interessar em enviar qualquer comentário.
Prisioneiro ZERO
@ PrisonerZERO: não há problema com isso. Como você parecia feliz com a resposta de Raynos, meu comentário foi para o caso de você não saber aceitar uma resposta (não verifiquei seu perfil e seu representante sugere que você é um usuário relativamente novo aqui)
Marjan Venema
2

Responderei no JavaScriptMVC como colaborador:

Onde o JQuery se encaixa nas várias estruturas de controlador mencionadas acima?

JavaScriptMVC depende do jQuery e o usa extensivamente.

O JQuery é usado ao lado de cada um ou alguns deles têm sua própria 'versão com estilo JQuery' inserida?

JavaScriptMVC não tem funcionalidade concorrente com jQuery. Isso não é verdade no Backbone que possui seu próprio sistema de eventos. Mas, qualquer coisa que a espinha dorsal ou a coluna adicionar são muito mínimas.

Ainda são necessárias ferramentas como o RequireJS se você implementar uma das várias estruturas de controlador mencionadas acima?

JavaScriptMVC vem com um sistema de gerenciamento de dependências -> roubar. Você pode usar o JavaScriptMVC com o RequireJS, mas o roubo é realmente muito mais poderoso e quase o mesmo tamanho baixado por um usuário.

Qual parece mais modular? (veja as notas abaixo)

Isso não é opinativo. JavaScriptMVC é extremamente modular. Você usa apenas o que precisa. Em comparação com o Backbone ou a coluna, você pode usar as peças M, V ou C de forma independente. Quando montado, é apenas 1k maior que o Backbone (ao usar jQuery e Underscore). Você pode ver os vários tamanhos de componentes básicos aqui: https://github.com/jupiterjs/javascriptmvc/issues/26

Mas JavaScriptMVC é muito mais poderoso (em termos de recursos) vs Backbone ou Spine. Por exemplo, seus manipuladores de eventos modelados evitam praticamente todos os vazamentos de memória. Aqui está uma dica de ferramenta que se oculta quando a janela é clicada:

$.Controller('Tooltip',{
  "{window} click" : function(){
    this.element.remove();
  }
})

Isso é absolutamente crítico com a abordagem MVC quando seus controles estão ouvindo alterações no modelo, como:

$.Controller('Todos',{
  "{Todo} created" : function(Todo, ev, createdTodo){

  }
})

O controlador desvinculará automaticamente todos esses manipuladores de eventos externos.

Alguns outros pontos fortes das partes do MVC:

  • $ .Class é um sistema de classes muito poderoso
  • $ .View e $ .Model suportam adiados
  • O controlador $. Pode 'religar' os manipuladores de eventos
  • $ .Model suporta associações, getter / setters, padrões, validações

Agora, o JavaScriptMVC é muito mais do que apenas partes do MVC (que fazem parte do subprojeto jQueryMX). Tem:

  • jQueryMX - a funcionalidade ausente do jQuery, como eventos especiais, auxiliares de dom, etc.
  • Roubar - um sistema de gerenciamento de dependências. Mas ele pode fazer coisas como pegar um aplicativo ajax e torná-lo rastreável no Google.
  • FuncUnit - Uma estrutura de teste incrivelmente poderosa.

Agora, sobre o que usar, depende muito. Depende muito se você estiver criando um "aplicativo" ou uma "página". Um aplicativo que precisa de testes, gerenciamento de dependências, no qual você se preocupa com vazamentos de memória, eu examinaria o JMVC ou o SproutCore.

Se você está colando alguns widgets básicos, eu veria a coluna vertebral ou a espinha dorsal.

Justin Meyer
fonte
"Espinha dorsal ou coluna vertebral, você pode usar peças M, V ou C autônomas." Exceto que cada um dos M, V e C são tão grandes quanto a espinha dorsal e a coluna vertebral.
Raynos
Isso não é verdade. O backbone é de 5k com sua sublinhada dependência. Não tenho certeza do que é a coluna vertebral. Mas aqui está o detalhamento: Classe: 1k, Controlador: 1,74k, Modelo: 2,8k, $ .View: 1,6k, $ .String: .5k. Para um total combinado de 8,6k. São 3 mil a mais, mas muito mais recursos úteis.
Justin Meyer
Você usaria JavaScriptMVC com algo como os controles da interface do Kendo? Quais outros controles?
Prisioneiro ZERO
Sim, qualquer biblioteca de interface do usuário baseada em jQuery deve funcionar muito bem (desde que use o sistema de eventos do jQuery para eventos).
Justin Meyer
Devo observar que o Backbone pode usar o Zepato em vez do jQuery, tornando-o muito menor do que as dependências combinadas do JMVC MVC com o jQuery. Mas você perde um pouco sem o jQuery.
Justin Meyer