2012-04-17 14 views
11

Robię stronę internetową z nieskończonym przewijaniem. Oznacza to, że gdy użytkownik przewija się na dół strony, nowy blok treści jest dołączany do dołu. Jest bardzo podobny do Facebooka. Oto przykład z 3 stron załadowany:Jak zapisać nieskończony stos zawartości AJAX, gdy użytkownik opuszcza stronę?

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

Gdy użytkownik kliknie coś na ostatniej stronie, biorę je na osobnej stronie szczegółów. Ale jeśli użytkownik kliknie z powrotem na stronę wyników wyszukiwania, nie mam pamięci z poprzedniej lokalizacji i musi ponownie załadować stronę 0.

_________ 
|   | 
| 0 | 
|_________| 

Znam niektórych metodach starej szkoły, aby rozwiązać ten problem, ale każdy z nich ma jakieś poważne problemy:

Hash URL

mogę zaktualizować adres URL za każdym razem, gdy nowa strona jest ładowana. Na przykład: www.website.com/page#2. Gdy użytkownik przechodzi do strony szczegółów iz powrotem, URL mówi mi ostatnią stronę załadowany, więc ja go załadować do niego:

_________ 
|   | 
| 2 | 
|_________| 

Ale to słaba doświadczenie użytkownika. Załadowana zostanie tylko strona 2. Użytkownik nie może przewinąć w górę, aby zobaczyć starszą zawartość. Nie mogę po prostu załadować stron 0, 1 i 2, ponieważ spowodowałoby to przeciążenie serwera, biorąc pod uwagę, że przycisk wstecz stanowi 50% ruchu internetowego (badanie Jacoba Nielsena).

Przechowywanie Lokalna

Cookies nie mają pojemność do przechowywania wielu stron danych. Local Storage powinien mieć wystarczającą ilość miejsca. Jednym z pomysłów jest przechowywanie wszystkich załadowanych stron w Magazynie lokalnym. Kiedy użytkownik wraca do wyników wyszukiwania, ładuję z lokalnego magazynu zamiast uderzać w serwer. Problem z tym podejściem polega na tym, że duża część moich użytkowników znajduje się w przeglądarkach, które nie są support local storage (IE7).

+0

Dlaczego ładowanie wszystkich wyświetlonych stron naraz przeciążałoby serwer, gdy zażądałby ich po 1 na raz? – Tejs

+2

... z nieskończoną ilością pamięci. – Phrogz

+1

@Tejs: Niepoprawnie sformułowałem moją myśl. Chodzi o to, że załadowanie stu stron naraz jest wolne dla użytkownika i niepotrzebnie obciąża serwer. – JoJo

Odpowiedz

1

Biorąc pod uwagę ograniczenia twojego problemu, jedyne wiarygodne rozwiązanie, jakie mogę wymyślić, to buforowanie wysokości poprzednich stron, a następnie załadowanie ich, jeśli użytkownik przewinie w górę. Spowoduje to przesunięcie przewijania w górę i umożliwi wyzwolenie obciążenia, jeśli użytkownik wyszuka. Dodatkowo, jeśli chcesz mieć trochę więcej ochoty, spróbuję wymyślić sposób na zatrzymanie paska przewijania, aby uniemożliwić użytkownikowi przewijanie obok poprzedniej nieobciążonej strony. W ten sposób nie będą w stanie wyzwolić wielu ładowań stron naraz.

1

Zamiast przenosić użytkownika na osobną stronę szczegółów, zamiast tego po prostu ukryć główną zawartość przewijania, załadować zawartość szczegółową za pośrednictwem Ajax/XMLHttpRequest(), a następnie pokazać tę zawartość? Innymi słowy, podobnie jak robi to Facebook. Przypuszczam, że to, czy możesz to zrobić, zależy od zawartości i czy jest to coś, co projektujesz i kontrolujesz, czy jest to coś zewnętrznego.

+1

Możesz nawet zmienić adres URL i obsługiwać przycisk Wstecz, używając 'history.pushState' i' window.onpopstate' :-) –

+0

@Rocket: To bardzo interesujące i nie miałem o tym pojęcia. To jest coś, co naprawdę skorzystałoby z mojego własnego projektu, który całkowicie wykorzystuje Ajax do manipulowania dużą ilością treści na jednej stronie. Wielkie dzięki za udostępnienie. – Trevor

+0

Strona szczegółów jest poza moją kontrolą. Muszę iść na nową stronę fizyczną. – JoJo

Powiązane problemy