2015-06-15 2 views
1

Я создал фреймворк в javascript для своих личных одностраничных приложений, и я пытаюсь добавить к нему функцию страницы стека.укладка страниц в SPA, хорошая идея или плохая?

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

Единственная разница в том, что в android страница, которая была нажата для стека, остается там до тех пор, пока ОС не выйдет из бара или что-то в этом роде, но в браузере страница будет уничтожена, несмотря ни на что.

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

, но есть некоторые проблемы, связанные с этим методом:

  1. если держать сложены страницы в Javascript переменной или сохранить его в DOM и просто сделать дисплей: нет; стиль, применяемый к нему, выводя его на передний план и делая его видимым, требует красить всю страницу снова, и если страница слишком велика, это означает большой процесс и делает переход между страницами чрезвычайно медленным, особенно если у вас есть анимация при переходе страницы.

  2. , и если наложенная страница видна и просто нажата с помощью z-index, прокрутка вызовет проблему, поскольку прокрутка для предыдущих страниц по-прежнему доступна. и если вы делаете переполнения страниц: hidden; то, если вы складываете несколько страниц, прокрутка становится очень медленной и прерывистой, потому что браузер должен прокручивать несколько слоев раскрашенных страниц.

, и поэтому мой вопрос в том, есть ли даже хорошая идея укладывать страницы с этими проблемами? , или это просто не должно произойти в браузерах?

+1

которые вы используете? – pmverma

+1

Почему вы не можете использовать API истории HTML5? – Claies

+0

Это собственная структура, которую я создал сам. –

ответ

1

В зависимости от вашего SPA я не думаю, что это хорошая идея, чтобы сохранить все страницы в DOM и скрыть их с помощью display: none; или другого z-индекса. То, что вы могли бы попытаться сделать, - сохранить состояние/информацию на странице в переменной и удалить все связанные элементы из DOM. Когда пользователь возвращается на одну страницу, вы воссоздали элементы с информацией, которую вы ранее сохраняли в переменной. Таким образом, вы предотвращаете загрузку информации с сервера, и у вас нет проблем с возвратом в любое состояние.

Возможно, вы сможете оптимизировать его еще больше, сохранив последнюю страницу в DOM и просто спрячьте ее и сохраните состояние страниц раньше в переменной.

+0

вы хотите сохранить модель данных в переменной и проверить, существует ли модель данных для этой страницы, и если да, то загрузите страницу с этой модели, верно? –

+0

Да, точно. Вы даже можете попытаться использовать [API истории HTML5] (https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history), поскольку Claies предложили сохранить состояние каждой страницы, поэтому вам не нужно самостоятельно настраивать логику. API истории также имеет преимущество в том, что функциональные кнопки браузера назад/вперед функциональны –

+0

, я использовал этот метод до сих пор, когда понял, что для больших страниц этот метод не работает, представьте себе такую ​​страницу, как google plus, где вы можно прокручивать мили, а страница становится все больше и больше, теперь, если вы перейдете на страницу профиля и вернетесь, у вас может быть модель данных для всей страницы, но, создав этот список и выбрав пользователя до такой степени, требует тонны обработки и рисования, поэтому я решил сохранить главную страницу всегда в памяти, поэтому, когда пользователь нажимает кнопку «Назад», он может мгновенно вернуться туда, где был. –

Смежные вопросы