Код
#Руководства

Как улучшить SPA для удобства пользователей и выгоды бизнеса

Разбираемся, как сделать одностраничное приложение лучше и удобнее.

 vlada_maestro / shutterstock

Напомним, что SPA (англ. Single Page Application одностраничное приложение) — это сайт, для работы которого не требуется обновление страницы, потому что все данные загружаются с помощью скриптов.

SPA становится всё больше, но не все из них достаточно хороши для пользователей и способны работать на благо бизнеса. У нас уже есть статья о том, как создаются одностраничные приложения. Сейчас же мы поделимся советами по улучшению таких сайтов.

Заранее подгружайте контент для ленты

Лента контента — это список статей в блоге, комментарии пользователей и изображения. В большинстве случаев она устроена так:

  • Пользователь заходит на страницу и видит только часть ленты —
    10–20 публикаций.
  • Когда он доходит до конца ленты, там появляется кнопка «Загрузить ещё». При нажатии на эту кнопку загружается ещё порция контента. И так до бесконечности.

Обычно после нажатия на кнопку приложению нужно какое-то время, чтобы отправить запрос на сервер и подгрузить новый контент. Чтобы пользователь не замечал этого, лучше загружать всё заранее — в момент, когда он почти дочитал страницу до кнопки.

const loadBtn = document.getElementById("load-btn");

//Расстояние от кнопки, когда начинается подгрузка
const preloadArea = 500;

//Каждый раз, когда пользователь скроллит страницу, проверяем, как далеко он от кнопки
window.addEventListener("scroll", function (e) { CheckPosition(); });

function CheckPosition()
{
    //Если пользователь долистал до определённого расстояния от кнопки, загружаем контент
    if(window.scrollY > loadBtn.offsetTop - preloadArea)
    {
   	 PreloadContent();
    }
}

Теперь, когда пользователь нажмёт на кнопку, новый контент появится гораздо быстрее, потому что всё уже загружено. По желанию вы можете совсем убрать кнопку и выводить новые публикации, как только они будут готовы.

Заранее загружайте страницы, которые могут быть открыты

Проанализируйте, какие страницы чаще всего открывают ваши пользователи. Например, после прочтения статьи A они всегда переходят на статью B или после просмотра главной страницы всегда открывают раздел с контактами.

Чтобы ускорить переход по ссылкам, можно загружать связанные страницы:

function Init(page)
{
    //Загружаем текущую страницу
    var loaded = Load(page);

    //Если страница загрузилась успешно, загружаем связанные страницы
    if(loaded)
    {
   	 PreloadRelatedPages();
    }
}

Ещё одна идея — загружать страницу, когда пользователь наводит курсор на ссылку или кнопку, дочитывает до определённой части материала и так далее. Это тоже дополнительно ускорит работу сайта.

Не скачивайте все медиафайлы

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

Подгружайте только текст или код страниц, а для всех медиафайлов пользуйтесь ленивой загрузкой. Подробнее о ней — в статье «Как заставить сайт грузиться быстрее».

Открывайте страницу целиком

Многие одностраничные приложения состоят из HTML-файла, в котором нет ничего, кроме вёрстки и стилей со скриптами. Перейдя на такой сайт, пользователь сначала увидит пустую страницу. Контент появится только после того, как JavaScript обменяется данными с сервером.

Чтобы такого не происходило, стоит показывать пользователю страницу с уже готовым контентом.

<!DOCTYPE html>
<html>
    <head>
   	 <title>SPA</title>
   	 <link rel="stylesheet" type="text/css" href="app.css">
    </head>
    <body>
   	 <main>
   		 <?
   		 //Выводим контент страницы
   		 echo $pageContent;
   		 ?>
   	 </main>
   	 <script type="text/javascript" src="app.js"></script>
    </body>
</html>

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

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

Показывайте актуальные данные

Чем реже пользователю придётся обновлять страницу, тем лучше — так ему не придётся заново ожидать подгрузки стилей и скриптов, чтобы увидеть что-то новое.

Для ленты, например, можно написать вот такой скрипт:

//Указываем, что нужно раз в полсекунды проверять обновления
setInterval(Update, 500);

function Update()
{
    //Проверяем ID новейшей публикации
    let newId = GetNewestId();

    //Если он не совпадает с ID последней загруженной публикации, то нужно обновить страницу
    if(newId != lastId)
    {
   	 //Загружаем новый контент
   	 let data = Load(newId);
   	 lastId = newId;

   	 //Обновляем страницу
   	 pageContent.innerHTML = data.html + pageContent.innerHTML;
    }
}

Этот пример сильно упрощён, потому что он учитывает только одну новую публикацию; вам же нужно быть уверенным в загрузке всего, что успело появиться на сайте.

Заключение

Даже в таких простых вещах, как SPA, есть огромное количество нюансов. И именно знание всех деталей отличает профессионала своего дела от обычного разработчика.

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована