2012-04-17 17 views
11

Estoy haciendo un sitio web con desplazamiento infinito. Es decir, a medida que el usuario se desplaza hacia la parte inferior de la página, se agrega un nuevo bloque de contenido al final. Es muy similar a Facebook. Aquí está un ejemplo de 3 páginas cargadas:¿Cómo guardo una pila infinita de contenido AJAX cuando un usuario abandona la página?

_________ 
|   | 
| 0 | 
|_________| 
|   | 
| 1 | 
|_________| 
|   | 
| 2 | 
|_________| 

Cuando el usuario hace clic en algo en la última página, los llevo a una página de detalle separada. Pero si el usuario vuelve a hacer clic en la página de resultados de búsqueda, no tengo memoria de su ubicación anterior y debo cargar la página 0 nuevamente.

_________ 
|   | 
| 0 | 
|_________| 

sé de algunos métodos de la vieja escuela para resolver esto, pero cada uno tiene algunos problemas serios:

URL hash

pude actualizar la dirección URL cada vez que se carga una nueva página. Por ejemplo: www.website.com/page#2. Cuando el usuario va a la página de detalles y la espalda, la URL me dice que la última página cargada, por lo que se carga por él:

_________ 
|   | 
| 2 | 
|_________| 

Pero esto es pobre experiencia de usuario. Solo la página 2 está cargada. El usuario no puede desplazarse hacia arriba para ver contenido anterior. No puedo simplemente cargar las páginas 0, 1 y 2 porque eso sobrecargaría el servidor, teniendo en cuenta que el botón Atrás representa el 50% del tráfico web (estudio de Jacob Nielsen).

almacenamiento local

cookies no tienen la capacidad de almacenamiento para almacenar muchas páginas de datos. Local Storage debe tener suficiente espacio. Una idea es almacenar todas las páginas cargadas en el almacenamiento local. Cuando el usuario vuelve a los resultados de búsqueda, cargo desde el almacenamiento local en lugar de presionar el servidor. El problema con este enfoque es que una gran parte de mis usuarios están en buscadores que no tienen support local storage (IE7).

+0

¿Por qué la carga de todas las páginas que ha mostrado a la vez sobrecarga el servidor al solicitarlas de a una por vez? – Tejs

+2

... con una cantidad infinita de memoria. – Phrogz

+1

@Tejs: Formulé mi pensamiento incorrectamente. Me refiero a que cargar cientos de páginas al mismo tiempo es lento para el usuario y genera una carga innecesaria en el servidor. – JoJo

Respuesta

1

Dadas las limitaciones de su problema, la única solución plausible que puedo pensar sería almacenar en memoria caché las alturas de las páginas anteriores y luego cargarlas si el usuario se desplaza hacia arriba. Esto rellenaría su desplazamiento ascendente y le permitiría activar una carga si el usuario mira hacia arriba. Además, si quisieras hacerte un poco más elegante, trataría de encontrar una forma de congelar la barra de desplazamiento para evitar que el usuario se desplace más allá de la página anterior descargada. De esta forma, no podrían activar múltiples cargas de página a la vez.

1

En lugar de llevar al usuario a una página de detalles separada, ¿por qué no simplemente ocultar el contenido de desplazamiento principal, cargar el contenido detallado a través de Ajax/XMLHttpRequest() y luego hacer visible ese contenido? En otras palabras, al igual que Facebook lo hace. Supongo que si puedes hacer esto depende de lo que sea el contenido y si es algo que estás diseñando y controlando, o si es algo externo.

+1

Incluso puede cambiar la URL y manejar el botón Atrás usando 'history.pushState' y' window.onpopstate' :-) –

+0

@Rocket: Eso es muy interesante y no tenía idea de eso. Eso es algo que un proyecto mío, que utiliza por completo Ajax para manipular gran cantidad de contenido dentro de una sola página, realmente se beneficiaría. Muchas gracias por compartir – Trevor

+0

La página de detalles está fuera de mi control. Debo ir a una nueva página física. – JoJo

Cuestiones relacionadas