Vue рендерит страницу из данных которые ему передали в объекте, т.е. получается сервер отдает html страницу, клиент получает страницу и передается ajax запрос на сервер для получения нужных данных, сервер отдает json, я в js вытаскиваю данные из json и отдаю их vue, все правильно? Или это делается как-то иначе?
Получается фронтенд и бэкенд уже не так тесно связан, как например в wp или других cms, где шаблоны обрабатываются на сервере и отдается уже готовый html. Получается на фронтенде вообще без разницы что и как работает на сервере, главное, что бы в ответ пришел нужный json, да?
Так же возможен вариант когда Vue рендерится на стороне сервера. Это когда сервер сам сует данные в шаблоны, после парсит комоненты vue к html-строке и отдает такой вариат клиенту. Этот механизм называется серверный рендеринг. Ваш описанный механизм называется клиентский рендеринг. Если их совместить, то получится изоморфное приложение.
Тут на самом деле много факторов. Клиентский рендеринг - это быстрый, отзывчивый интерфейс, но с долгой первой загрузкой и плохой индексацией поисковами роботами. Серверный рендеринг - это не очень быстрый интерфейс, с хорошой загрузкой страниц за счет браузерного кэша, а так же с хорошой поисковой индексацией. Желательно все это надо совместить вместе и получить на выходе изоморфоное приложение, но это сложно и время разработки увеличивается. Тут надо исходить из бизнес-требований и выбирать нужный вариант.
Да, всё почти верно. Одна поправка: JSON не является обязательным форматом взаимодействия, хоть и является самым удобным в использовании. Например, есть ещё бинарный msgpack
Александр Крымов, его лучше и использовать, поскольку msgpack даёт выигрыш, разве что, в скорости кодирования/декодирования. При этом абсолютно теряется читабельность и совместимость со многими библиотеками. Выигрыша в размере нет, если используется сжатие.
Все верно.
В случае с Vue можно сказать - есть "классический" вариант, когда SPA-приложение.
А есть более тесная связка Vue с бэкендом - это Nuxt.js (SSR).
В этом случае можно интегрировать тесную взаимосвязь с backend при помощи Express.js или Koa.js, к примеру. Но для этого нужны хорошие знания бэкенда - Node.js, MongoDB, Mongoose.