Давайте поговорим о преимуществах и недостатках одностраничных веб приложений.
Преимущества
1. Веб страница не перезагружается при навигации по приложению.
Это происходит из-за того, что дополнительные HTML страницы с сервера не загружаются, а вместо этого React с помощью JavaScript просто перерисовывает определенные части HTML страницы.
2. Моментальная перерисовка элементов веб страницы.
React позволяет перерисовывать только определённые части веб страницы. При этом оставляя остальные части без изменений. Следовательно, для пользователей перерисовка происходит практически мгновенно и приложение очень быстро реагирует на любые действия пользователя.
3. Легче разворачивать, потому что SPA содержит только несколько статических файлов.
В данном пункте речь идет о разворачивании приложения в production, т.е., когда приложение уже создано и вы его хотите опубликовать в публичном доступе пользователей. Для этого достаточно на сервере разместить несколько статических файлов.
4. Эффективное использование пропускной способности.
Клиент скачивает с сервера HTML, CSS и JavaScript файлы только при начальном подключении, а после этого все модификации HTML-страницы происходят на стороне клиента и опционально клиент запрашивает дополнительные данные с сервера. Простыми словами клиент не посылает постоянные запросы на сервер.
Недостатки
1. Для поисковой оптимизации (SEO) необходимо выполнить дополнительную настройку сервера для корректного сканирования ботами, такими как Googlebot.
Это связано с тем, что в SPA доступна только одна HTML-страница для всего приложения и именно её необходимо отдавать клиентам при обращении по разным ссылкам одного и того же приложения.
2. Большой размер файла JavaScript влияет на время начальной загрузки приложения.
Поскольку JavaScript-файл, который отдается клиентам при первом подключении включает в себя всю логику приложения, то размеры таких файлов могут быть большими и это влияет на время начальной отрисовки приложения. Существуют техники, которые позволяют разбивать такие большие файлы на отдельные и такие небольшие JavaScript-файлы подгружаются по мере работы (взаимодействия) с приложением.