Ответ 1
TL;DR:
- с серверной маршрутизацией вы загружаете всю новую веб-страницу всякий раз, когда вы нажимаете на ссылку,
- с маршрутизацией на стороне клиента, загрузка, обработка и отображение новых данных для вас.
Представьте, что пользователь нажимает на простую ссылку: <a href="/hello">Hello!</a>
В веб-приложении, использующем маршрутизацию на стороне сервера:
- Браузер обнаруживает, что пользователь нажал на элемент привязки.
- Он делает HTTP-запрос GET URL-адресу, найденному в теге
href
- Сервер обрабатывает запрос и отправляет новый документ (обычно HTML) в качестве ответа.
- Браузер полностью отбрасывает старую веб-страницу и отображает недавно загруженную.
Если webapp использует маршрутизацию на стороне клиента:
- Браузер обнаруживает, что пользователь нажал на элемент привязки, как и раньше.
- Клиентский код (обычно это библиотека маршрутизации) ловит это событие, обнаруживает, что URL-адрес не является внешней ссылкой, а затем запрещает браузер делать запрос HTTP GET.
- Библиотека маршрутизации затем вручную изменяет URL, отображаемую в браузере (используя API истории HTML5 или, возможно, URL-адреса хэширования в старых браузерах)
- Библиотека маршрутизации затем изменяет состояние клиентского приложения. Например, он может изменить исходный файл React/ Angular/etc в соответствии с правилами маршрута.
- Приложение (в частности, библиотека MVC, например React), затем обрабатывает изменения состояния. Он отображает новые компоненты, и при необходимости он запрашивает новые данные с сервера. Но на этот раз ответ не обязательно является цельной веб-страницей, он также может быть "сырыми" данными, и в этом случае клиентский код превращает его в HTML-элементы.
Напротив, маршрутизация на стороне клиента усложняется, потому что это так. Но некоторые библиотеки действительно облегчают эти дни.
Существует несколько сторон маршрутизации на стороне клиента: вы загружаете меньше данных, чтобы отображать новый контент, вы можете повторно использовать элементы DOM, отображать уведомления о загрузке пользователю и т.д. Однако веб-приложения, которые генерируют DOM на стороне сервера, намного проще сканировать (поисковыми системами), тем самым упрощая оптимизацию SEO. Комбинирование этих двух подходов также возможно, отличный пример Router SSR является хорошим примером для этого.