Vantagens e desvantagens de criar um aplicativo da web de uma página [fechado]

52

Estou chegando ao final de uma fase de prototipagem / prova de conceito para um projeto paralelo em que estou trabalhando e tentando decidir sobre algumas decisões de design de aplicativos em maior escala. O aplicativo é um sistema de gerenciamento de projetos adaptado mais ao processo de desenvolvimento ágil. Uma das decisões que preciso tomar é se deve ou não usar um aplicativo tradicional de várias páginas ou um único aplicativo de página.

Atualmente, meu protótipo é uma configuração tradicional de várias páginas, no entanto, estive procurando no backbone.js para limpar e aplicar alguma estrutura ao meu código Javascript (jQuery). Parece que, embora o backbone.js possa ser usado em aplicativos de várias páginas, ele brilha mais com aplicativos de página única. Estou tentando criar uma lista de vantagens e desvantagens do uso de uma abordagem de design de aplicativo de página única. Até agora eu tenho:

Vantagens

  • Todos os dados precisam estar disponíveis por meio de algum tipo de API - essa é uma grande vantagem para o meu caso de uso, pois eu quero ter uma API para meu aplicativo de qualquer maneira. No momento, cerca de 60 a 70% das minhas chamadas para obter / atualizar dados são feitas por meio de uma API REST. A execução de um aplicativo de página única permitirá testar melhor minha API REST, pois o próprio aplicativo a usará. Isso também significa que, à medida que o aplicativo cresce, a própria API cresce, pois é isso que o aplicativo usa; não há necessidade de manter a API como um complemento para o aplicativo.

  • Aplicativo mais responsivo - como todos os dados carregados após a página inicial são reduzidos ao mínimo e transmitidos em um formato compacto (como o JSON), as solicitações de dados geralmente devem ser mais rápidas e o servidor fará um processamento ligeiramente menos.

Desvantagens

  • Duplicação de código - por exemplo, código de modelo. Eu vou ter que criar modelos no lado do servidor (PHP neste caso) e no lado do cliente em Javascript.
  • Lógica de negócios em Javascript - não posso dar exemplos concretos de por que isso seria ruim, mas simplesmente não me parece correto ter uma lógica de negócios em Javascript que qualquer pessoa possa ler.
  • Vazamentos de memória Javascript - como a página nunca é recarregada, podem ocorrer vazamentos de memória Javascript, e eu nem sabia por onde começar a depurá-los.

Há também outras coisas que são espadas de dois gumes. Por exemplo, com aplicativos de página única, os dados processados ​​para cada solicitação podem ser muito menores, pois o aplicativo solicita os dados mínimos necessários para uma solicitação específica, no entanto, isso também significa que pode haver uma solicitação muito mais pequena para o servidor. Não tenho certeza se isso é uma coisa boa ou ruim.

Quais são algumas das vantagens e desvantagens dos aplicativos da web de página única que devo ter em mente ao decidir qual caminho devo seguir para o meu projeto?

ryanzec
fonte
Basecamp , a nova versão do basecamphq está fazendo um bom trabalho com o IMO de configuração de página única.
Hakan Deryal
Você pode encontrar vazamentos de memória com inspetor montão de chrome: gent.ilcore.com/2011/08/finding-memory-leaks.html
Joeri Sebrechts
obrigatório xkcd.com/1309
Pieter B

Respostas:

17

A maior desvantagem é que o cliente deve ter o JavaScript ativado e ser poderoso o suficiente para executar uma boa quantidade dele. Também é mais difícil satisfazer as preocupações de acessibilidade ou qualquer outra coisa que dependa da análise de HTML estático (embora algo sabendo que sua API específica possa provavelmente fazer melhor do que a raspagem de HTML). Por fim, é mais fácil ter vazamentos significativos de memória.

No que diz respeito à duplicação de código ou à lógica de negócios do cliente - não tenho certeza de quanto você precisa fazer. Se o modelo no cliente for um View-Model (um modelo que corresponda ao mundo como a UI o vê, não um modelo de negócios), a lógica que corresponderá ao ViewModel até o modelo de negócios poderá residir no cliente, o servidor, ou um pouco de ambos. Depende de como você se sente em ter sua API contendo uma fachada específica do cliente versus fazer com que o cliente traduza as entradas da interface do usuário em chamadas de API.

Você também pode querer consultar o knockout.js. Não sei dizer se é melhor que o backbone, mas pode se encaixar melhor no seu projeto.

psr
fonte
Sim, eu acho que a maior parte da duplicação de código haverá validação de dados, o que é bom. Estou bem em ter o requisito de javascript ativado, pois não estou preocupado com a acessibilidade para este projeto (como o leitor de tela e o que não). Quanto ao problema de vazamento de memória javascript, que era uma preocupação minha, com o link fornecido nos comentários da minha pergunta, isso realmente nega isso (o chrome é o meu principal navegador de desenvolvimento).
Ryanzec
7

Desvantagens que costumo ver com aplicativos Web de página única:

  • Não é possível vincular a uma parte específica do site, geralmente há apenas 1 ponto de entrada.
  • Botões de retorno e avanço disfuncionais.
  • O uso de guias é limitado ou inexistente.

(especialmente para dispositivos móveis :)

  • Demore muito para carregar.
  • Não funciona de forma alguma.
  • Não é possível recarregar uma página, uma súbita perda de rede leva você de volta ao início do site.

Tudo isso pode ser contornado, mas pelo que vi, a maioria dos construtores de sites não.

Pieter B
fonte
9
1,2 e 6 são basicamente apenas símbolos do mesmo problema. Que o criador não use o link da API / hash do histórico.
Martin Hansen
11
Esta resposta está desatualizado, A maioria dos frameworks de aplicação única página tem uma maneira de lidar com as questões acima
Luis
@Luis enquanto a tecnologia está lá, muitas vezes não é usada.
Pieter B
5

Há um cliente muito importante que nunca executa o Javascript: o rastreador do Google (a partir de 2012) . (O Bing também não executa JS, suponho.)

Você precisará fornecer uma versão razoável não AJAX de todas as páginas que precisam ser indexadas ou links para uma página que precisa ser indexada.

Se seu site for pequeno, você poderá fornecer versões muito básicas das poucas páginas apenas para indexar bots.

Se a maior parte do conteúdo do site for apenas para usuários registrados ou não precisar ser indexada por outros motivos, você poderá criar todo o espaço não indexado como um aplicativo de uma página, com sua própria pesquisa, blackjack etc.

Se nenhuma dessas opções, você provavelmente está melhor desenvolvendo um site com várias páginas desde o início e fornecendo apenas atualizações do AJAX onde isso não altera o 'objetivo geral' da página.

9000
fonte
4
O Googlebot lê e até executa algum Javascript agora. Veja googlewebmastercentral.blogspot.com/2011/11/…
jfrankcarr
2
Para esta pergunta em particular, é um aplicativo de gerenciamento de projetos. Provavelmente não é um site digno de SEO.
Jordânia
O SEO não é uma grande preocupação para a maioria das páginas, mas seria bom poder solucionar problemas individuais de SEO, pois será configurável para permitir acesso anônimo a ele (para que, se um usuário pesquisar um problema que está tendo com o produto, ele pode encontre o problema relacionado a ele no rastreador).
Ryanzec #
11
2015 atualização: Google não executar JS
rinogo
3

-Duplicação de código - por exemplo, código de modelo. Eu vou ter que criar modelos no lado do servidor (PHP no caso) e no lado do servidor em javascript.

Você está no mundo PHP, mas existem estratégias de geração de código no mundo .NET para criar automaticamente proxies JavaScript WCF. Veja aqui

Não sei quais opções podem estar disponíveis para não ser necessário criar seus objetos remotos em JavaScript em um aplicativo PHP, mas essa é uma opção para quem escreve aplicativos de página única no .NET.

Brian
fonte
0

A escolha não precisa ser uma ou outra. O JWt é, por exemplo, um kit de ferramentas da Web que implementa a ilusão perfeita de uma página da Web de várias páginas, mas é uma única página. Além disso, ele reconhecerá os bots e navegadores do Google que não possuem javascript (experimente) e mudará para o modelo tradicional de várias páginas quando detectá-los.

Em resumo:

  • não é necessário escrever uma API (mas você ainda pode, se quiser)
  • aplicativo responsivo: cada clique do usuário precisa de no máximo um ida e volta de um servidor (além de buscar imagens)
  • sem duplicação de código
  • nenhuma lógica de negócios do lado do cliente
  • complexidade mínima do lado do cliente
  • os robôs de pesquisa podem indexá-lo
user52875
fonte
11
JWt é um kit de ferramentas java. A questão é sobre PHP.
Joeri Sebrechts