2011-04-30 31 views
8

Al escribir una aplicación para trabajar fuera de línea y en línea, ¿es mejor escribirla una vez para trabajar fuera de línea y el modo en línea funcionará igual que sin conexión?Escribir una aplicación para trabajar sin conexión (aplicación web)

Por ejemplo, veamos que tenemos un ejemplo típico de carrito de la compra. Un carrito de compras contiene artículos y un cliente.

Cuando se carga el carrito de compras, ¿debo almacenar en caché todos los artículos + clientes en el almacenamiento local y usar ese caché de datos tanto en línea como fuera de línea y actualizar el caché según sea necesario? ¿Cuáles son algunas de las mejores prácticas al desarrollar una aplicación web híbrida fuera de línea/en línea?

Respuesta

7

Escribir una aplicación web para trabajar en un modo en línea/fuera de línea es como escribir cualquier aplicación web "normal" impulsada por servidor, con la excepción de que tiene una capa de acceso a datos (DAL) aplicación y los datos que viven en el servidor (modo en línea) o en los datos del navegador (modo fuera de línea).

Dependiendo de la aplicación y sus necesidades, puede ejecutar en uno de los 2 modos: a.) Un modo de caché y prueba-lo-mejor o b.) A load-everything-and-check-for- modo de actualizaciones.

Cada uno de estos dos modos tiene algunas partes buenas y otras malas, y definitivamente puede tener diferentes partes de la aplicación que se inclinen hacia un lado o hacia el otro.

Cache-y-tratar-su-mejor modo

Para este modo, los cachés de datos desde el servidor DAL en los almacenes de datos del navegador, ya que accede a los datos durante su curso normal de operación. Una vez en el modo fuera de línea, el DAL intenta satisfacer las solicitudes de los usuarios, pero solo tiene que trabajar con los datos en caché y, por lo tanto, es posible que algunas operaciones no puedan completarse (o al menos no de inmediato). En el lado positivo, hay un tiempo de inicio mínimo esperando a que se carguen los datos, pero en el lado negativo, cada acción requiere un golpe de servidor (si está conectado) y esos datos deben almacenarse en caché. La aplicación también debe fallar con elegancia para cualquier operación que no pueda completar debido a datos incompletos.

modo de

En este caso de carga-todo-y-check-actualizaciones para-, las cargas DAL todos los datos de la aplicación necesita en el navegador cuando se inicia la aplicación. Si la aplicación ya se ha cargado, entonces todos los datos deben actualizarse para garantizar que la caché no esté obsoleta. En la parte superior, el usuario no tiene que esperar mucho para hacer cosas, ya que todo es una operación local, pero en el lado negativo, si hay una gran cantidad de datos, el tiempo de inicio podría ser más bien largo.

En cualquier caso, tiene que luchar contra problemas de caché obsoletos y problemas persistentes de operaciones fuera de línea en el servidor. Esto significa que en la puesta en marcha, y probablemente también periódicamente mientras la aplicación se está ejecutando, deberá sincronizar nuevamente con el servidor para mantener actualizados sus datos almacenados en caché y compartir cualquier estado solo local que pueda tener con el servidor. que el resto del mundo vea las actualizaciones de esa instancia de la aplicación.

Las operaciones persistentes de regreso al servidor que ocurrieron mientras la aplicación estaba en modo fuera de línea pueden ser particularmente complicadas cuando los datos involucrados en esa operación cambian entre las actualizaciones de la aplicación. Por ejemplo, si un saldo bancario en caché está desactualizado e indica mucho más dinero que el estado "verdadero" reflejado por el servidor, un usuario podría sobregirar la cuenta sin saberlo. Este es un ejemplo extremo, pero este tipo de detección de colisión operacional necesita estar en su lugar para manejar las actualizaciones que pueden encontrarse entre sí.

En general, si tiene una aplicación que puede ser tanto en línea como fuera de línea, escriba la aplicación para que la aplicación en sí no tenga que importarle. Una capa de datos de nivel inferior resuelve todos los problemas, y tu aplicación solo necesita saber cómo lidiar con la imposibilidad de obtener la información que desea (que cualquier buena aplicación, en línea o fuera de línea, debería hacer).

Para un carrito de compras, es probable (¿o afortunadamente?) Tener MUCHO más productos de los que cualquier cliente individual puede poner en su carrito. Cargarlos todos en el navegador de todos es casi seguro un ENORME desperdicio de ancho de banda y causaría tal retraso para sus usuarios que el costo masivo de ancho de banda y la pérdida de ventas (debido a tiempos de respuesta lentos) hundirían rápidamente cualquier negocio. Cargue los productos en los datos del navegador según sea necesario, y si lo desea, puede cargar otros productos que "otros usuarios también compraron" que están asociados con los artículos que están en el carrito.

Cuestiones relacionadas