Ventajas y desventajas de crear una aplicación web de una sola página [cerrado]


52

Estoy llegando al final de una fase de creación de prototipos / prueba de concepto para un proyecto paralelo en el que estoy trabajando, y estoy tratando de decidir sobre algunas decisiones de diseño de aplicaciones a mayor escala. La aplicación es un sistema de gestión de proyectos adaptado más al proceso de desarrollo ágil. Una de las decisiones que debo tomar es si usar o no una aplicación tradicional de varias páginas o una aplicación de una sola página.

Actualmente mi prototipo es una configuración tradicional de varias páginas, sin embargo, he estado buscando en backbone.js para limpiar y aplicar alguna estructura a mi código Javascript (jQuery). Parece que si bien backbone.js se puede usar en aplicaciones de varias páginas, brilla más con aplicaciones de una sola página. Estoy tratando de encontrar una lista de ventajas y desventajas de usar un enfoque de diseño de aplicaciones de una sola página. Hasta ahora tengo:

Ventajas

  • Todos los datos deben estar disponibles a través de algún tipo de API; esta es una gran ventaja para mi caso de uso, ya que de todos modos quiero tener una API para mi aplicación. En este momento, alrededor del 60-70% de mis llamadas para obtener / actualizar datos se realizan a través de una API REST. Hacer una aplicación de una sola página me permitirá probar mejor mi API REST ya que la aplicación misma la usará. También significa que a medida que la aplicación crece, la API en sí crecerá, ya que eso es lo que usa la aplicación; no es necesario mantener la API como complemento de la aplicación.

  • Aplicación más receptiva: dado que todos los datos cargados después de la página inicial se mantienen al mínimo y se transmiten en un formato compacto (como JSON), las solicitudes de datos generalmente deberían ser más rápidas y el servidor procesará un poco menos.

Desventajas

  • Duplicación de código, por ejemplo, código de modelo. Voy a tener que crear modelos tanto en el lado del servidor (PHP en este caso) como en el lado del cliente en Javascript.
  • Lógica empresarial en Javascript: no puedo dar ejemplos concretos de por qué esto sería malo, pero no me parece correcto tener una lógica empresarial en Javascript que cualquiera pueda leer.
  • Pérdidas de memoria de Javascript: dado que la página nunca se recarga, pueden ocurrir pérdidas de memoria de Javascript, y ni siquiera sabría por dónde empezar a depurarlas.

También hay otras cosas que son una especie de espadas de doble filo. Por ejemplo, con aplicaciones de una sola página, los datos procesados ​​para cada solicitud pueden ser mucho menores, ya que la aplicación solicitará los datos mínimos que necesita para la solicitud en particular, sin embargo, también significa que podría haber una solicitud mucho más pequeña para el servidor. No estoy seguro de si eso es bueno o malo.

¿Cuáles son algunas de las ventajas y desventajas de las aplicaciones web de una sola página que debo tener en cuenta al decidir qué camino tomar para mi proyecto?


Basecamp , la nueva versión de basecamphq está haciendo un trabajo bastante bueno con la configuración de página única IMO.
Hakan Deryal

Puede encontrar pérdidas de memoria con el inspector de montón de Chrome
Joeri Sebrechts

obligatorio xkcd.com/1309
Pieter B

Respuestas:


17

La mayor desventaja es que el cliente debe tener habilitado JavaScript y ser lo suficientemente potente como para ejecutar una buena cantidad de él. También es más difícil satisfacer las preocupaciones de accesibilidad o cualquier otra cosa que se base en analizar HTML estático (aunque algo que conozca su API específica probablemente pueda ser mejor que el raspado de HTML). Finalmente, es más fácil tener pérdidas importantes de memoria.

En cuanto a duplicar código o poner lógica de negocios en el cliente, no estoy seguro de cuánto tiene que hacer. Si el modelo en el cliente es un modelo de vista (un modelo que coincide con el mundo tal como lo ve la IU, no un modelo de negocio), entonces la lógica que coincide con el modelo de vista hasta el modelo de negocio puede residir en el cliente, el servidor, o un poco de ambos. Depende de cómo se sienta acerca de que su API contenga una fachada específica del cliente en lugar de que el cliente traduzca las entradas de la interfaz de usuario en llamadas de API.

También es posible que desee ver knockout.js. No puedo decir si es mejor que la red troncal, pero puede ajustarse mejor a su proyecto.


Sí, supongo que la mayor parte de la duplicación de código habrá validación de datos que está bien. Estoy de acuerdo con tener el requisito de que Javascript esté habilitado ya que no me preocupa la accesibilidad para este proyecto (como el lector de pantalla y lo que no). En cuanto al problema de fugas de memoria de JavaScript, que era una preocupación mía, con el enlace proporcionado en los comentarios de mi pregunta, eso realmente lo niega (de todos modos, Chrome es mi navegador principal de desarrollo).
ryanzec

7

Desventajas que a menudo veo con las aplicaciones web de una sola página:

  • Incapacidad para vincular a una parte específica del sitio, a menudo solo hay 1 punto de entrada.
  • Botones funcionales hacia atrás y hacia adelante.
  • El uso de pestañas es limitado o inexistente.

(especialmente móvil :)

  • Tardan mucho en cargar.
  • No funciona en absoluto.
  • No se puede volver a cargar una página, una pérdida repentina de la red lo lleva de vuelta al inicio del sitio.

Todo esto se puede solucionar, pero por lo que he visto, la mayoría de los creadores de sitios no.


99
1, 2 y 6 son básicamente sinfismos del mismo problema. Que el creador no usa la API de historial / enlace hash.
Martin Hansen

11
Esta respuesta está desactualizada, la mayoría de los marcos de aplicaciones de una sola página tienen una forma de lidiar con los problemas anteriores
Luis

@Luis mientras la tecnología está allí, con demasiada frecuencia no se usa.
Pieter B

5

Hay un cliente muy importante que nunca ejecuta Javascript: el rastreador de Google (a partir de 2012) . (Bing's tampoco ejecuta JS, supongo).

Deberá proporcionar una versión razonable que no sea AJAX de cada página que deba indexarse, o enlaces a una página que deba indexarse.

Si su sitio es pequeño, puede proporcionar versiones muy básicas de las pocas páginas solo para indexar bots.

Si la mayor parte del contenido del sitio es solo para usuarios registrados, o no necesita ser indexado por alguna otra razón, puede crear todo el espacio no indexado como una aplicación de una página, con su propia búsqueda, blackjack, etc.

Si ninguno de estos, probablemente sea mejor desarrollar un sitio de varias páginas desde el principio, y solo proporcionar actualizaciones AJAX donde no cambie el "propósito general" de la página.


44
Googlebot lee e incluso ejecuta algunos Javascript ahora. Ver googlewebmastercentral.blogspot.com/2011/11/…
jfrankcarr

2
Para esta pregunta en particular, es una aplicación de gestión de proyectos. Probablemente no sea un sitio digno de SEO.
Jordania

El SEO no es una gran preocupación para la mayoría de las páginas, aunque sería bueno poder resolver problemas individuales de SEO ya que será configurable para permitir el acceso anónimo a él (de modo que si un usuario busca en Google un problema que está teniendo con el producto, puede encuentre el problema relacionado con él en el rastreador).
ryanzec

1
Actualización de 2015: Google no ejecutar JS
rinogo

3

-Duplicación de código: por ejemplo, código de modelo. Voy a tener que crear modelos tanto en el lado del servidor (PHP en el caso) como en el lado del servidor en javascript.

Estás en el mundo de PHP, pero hay estrategias de generación de código en el mundo .NET para crear automáticamente proxies JavaScript WCF. Ver aquí

No sé qué opciones podrían estar disponibles para no tener que crear sus objetos remotos usted mismo en JavaScript en una aplicación PHP, pero esta es una opción para quienes escriben aplicaciones de una sola página en .NET.


0

La elección no tiene que ser la una o la otra. JWt es, por ejemplo, un kit de herramientas web que implementa la ilusión perfecta de una página web de varias páginas, pero es una sola página. Además, reconocerá los robots y navegadores de Google que no tienen JavaScript (pruébelo), y cambiará al modelo tradicional de varias páginas cuando los detecte.

En breve:

  • no es necesario escribir una API (pero aún puede hacerlo, si lo desea)
  • aplicación receptiva: cada clic de usuario necesita a lo sumo un servidor de ida y vuelta (además de buscar imágenes)
  • sin duplicación de código
  • sin lógica de negocios del lado del cliente
  • complejidad mínima del lado del cliente
  • los robots de búsqueda pueden indexarlo

1
JWt es un kit de herramientas de Java. La pregunta es sobre PHP.
Joeri Sebrechts
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.