Как сохранить бесконечный стек содержимого AJAX, когда пользователь покидает страницу?

Я делаю сайт с бесконечной прокруткой. То есть, когда пользователь прокручивается в нижней части страницы, новый блок содержимого добавляется к нижней части. Это очень похоже на Facebook. Вот пример загрузки трех страниц:

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

Когда пользователь нажимает что-то на последней странице, я беру их на отдельную страницу подробностей. Но если пользователь нажимает на страницу результатов поиска, у меня нет памяти об их предыдущем местоположении и снова загружайте страницу 0.

 _________
|         |
|    0    |
|_________|

Я знаю некоторые методы старой школы, чтобы решить эту проблему, но у каждого из них есть серьезные проблемы:

URL-адрес хэша

Я могу обновлять URL-адрес каждый раз при загрузке новой страницы. Например: www.website.com/page#2. Когда пользователь переходит на страницу подробностей и обратно, URL-адрес сообщает мне последнюю загруженную страницу, поэтому я загружаю ее для него:

 _________
|         |
|    2    |
|_________|

Но это плохой опыт работы с пользователями. Загружается только страница 2. Пользователь не может просматривать предыдущий контент. Я не могу просто загружать страницы 0, 1 и 2, потому что это перегрузит сервер, учитывая, что на кнопку "Назад" приходится 50% веб-трафика (исследование Якова Нильсена).

Локальное хранилище

В файлах cookie нет хранилища для хранения многих страниц данных. Локальное хранилище должно быть достаточно места. Одна из идей - хранить все загруженные страницы в локальном хранилище. Когда пользователь возвращается к результатам поиска, я загружаюсь из локального хранилища вместо того, чтобы ударять по серверу. Проблема с этим подходом заключается в том, что большая часть моих пользователей находится в браузерах, которые не поддерживают локальное хранилище (IE7).

Ответ 1

Учитывая ограничения вашей проблемы, единственное правдоподобное решение, о котором я могу думать, - это кэшировать высоты предыдущих страниц, а затем загружать их, если пользователь прокручивается вверх. Это позволит прокрутить вверх прокрутку и позволить вам запускать нагрузку, если пользователь смотрит вверх. Кроме того, если вы хотите получить немного больше фантазии, я попытаюсь выяснить способ замораживания полосы прокрутки, чтобы пользователь не прокручивал предыдущую разгруженную страницу. Таким образом, они не смогут одновременно запускать несколько загрузок страниц.

Ответ 2

Вместо того, чтобы полностью загружать пользователя на отдельную страницу подробностей, вместо этого не просто скрыть основной прокручиваемый контент, загрузите подробный контент через Ajax/ XMLHttpRequest(), а затем сделайте видимым этот контент? Другими словами, как это делает Facebook. Я полагаю, что вы можете это сделать, зависит от того, что такое контент, и от того, что вы разрабатываете и контролируете, или если это что-то внешнее.