Как сохранить бесконечный стек содержимого 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. Я полагаю, что вы можете это сделать, зависит от того, что такое контент, и от того, что вы разрабатываете и контролируете, или если это что-то внешнее.