Roman
или это полноценное SPA, SPA в том понятии что мы 1 раз загрузили так скажем "exe'шник" (HTML/CSS/JS файлы) и дальше общаемся только с application-server'ом
Roman
понял в чём магия, у тебя действительно совсем иной подход
Mike
prerender-server, как ты назвал, или bff, как я его назвал просто проксирует запросы к аппликейшн серверу
Mike
так что да, SPA шлет на bff запросы, а не на апп сервер
Mike
но шлет запросы, а не перезагружает страницу
Mike
так что таки SPA
Roman
нее, prerender же запускает headless browser на сервер и рендерит чистый статический HTML который возвращает crawler'ам
Mike
смотри, когда я говорю prerender.io я имею в виду конкретное решение, когда prerender — то, что ты в архитектуре из трех частей назвал так
Roman
application server - в моём понятии возвращает исключительно данные в JSON формате. никакого AJAX. file server - возвращает само приложение, т.е. "exe'шник" состоящий из HTML / CSS / JS
Mike
ну так
Mike
в моем тоже
Mike
только это
Mike
как связан аякс с json?)
Mike
вот аппликейшн серверу не похер, как к нему запрос пришел, через аякс или нет?
Roman
как связан аякс с json?)
никак)) абсолютно разные подходы в которых AJAX явно проигрывает. чистый JSON API можно к любому клиенту привезать, а AJAX только к браузеру
Roman
"спасибо кэп", да, это про меня))
Mike
все еще не понимаю, аякс — один из типов запросов, никак не связанный с сервером)
Roman
хмм... т.е. в твоей архитектуре prerender server (не prerender.io а свой кастомный) это Proxy если этот proxy получает запрос от клиента - перенаправляет к application server'у а если от crawler'а то рендерит статику и возвращает?
Mike
смотри, грубо говоря, флоу такой 1) пользователь идет на страницу /profile/zuldare 2) мой bff получает запрос на /profile/zuldare, он идет на аппликейшн сервер GET /user?nick=zuldare и получает результат 3) он рендерит статическую страничку (exe твой) и отдает ее на клиента 4) клиент уже увидел статическую страничку и нажал "мой профиль" 5) клиент попадает уже js роутером на страницу /profile, данных у него нет, он делает запрос AJAX на bff GET /api/profile 6) bff находит по токену пользователя его ник у себя, идет на апп сервер GET /user?nick=some 7) получает JSON и форвардит его в ответ клиенту, который им уже пользуется
Mike
и мне в итоге похер, кроулер это или нет
Mike
все клиенты получают страничку БЫСТРО
Mike
потому что js не ждут пока скачается (бандлы-то немаленькие у SPA)
Mike
и при этом еще и индексация проходит
Roman
ох ё-моё, чёт сложновато, тебе не кажется?
Mike
это стандарт де-факто в мире реакта)
Mike
и это рил быстро работает
Mike
и когда один раз так сделаешь, все другие подходы кажутся странными
Roman
в мире реакта, верно подмечено)) для меня реакт чужда))
Mike
ну и плюс я тебе слишком длинный флоу рассказал чтобы пояснить про прокси
Mike
на самом деле можно переставать читать на 3
ℝei
или это и с Vue реально?
вью так может, nuxt например
Roman
ох как не охото ещё один подход изучать.. я уже так к Vue привык, так-что для меня совсем не вариант теперь ещё и реакт изучать
Mike
а реакт тут не при чем
Mike
его фишка в том что нодой его отрендерить в одну строчку можно
Mike
а тебе вон подсказывают что у вью такая либа тоже есть
ℝei
и вью можно https://github.com/vuejs/vue-hackernews-2.0
Roman
сейчас ещё раз пройдусь по пошаговому описанию, самое сложное это "wrapping your head around an idea"
Mike
можешь просто попробовать погуглить про SSR
Mike
в интернете про это очень много написано
Mike
https://github.com/csbun/vue2-ssr-example вот например вроде на той же идее штука, и при этом с vue
Roman
в шаге 5) делается AJAX запрос, т.е. сервер возвращает HTML?
Mike
нет
Mike
на аякс отдается JSON
Roman
я привык к правилу что весь HTML качается лишь раз, а любая остальная коммуникация уже исключительно в JSON
ℝei
если используешь вью то у него целая дока по ssr есть https://ssr.vuejs.org/
Mike
у тебя кажется какая-то странная мысль, что аякс не умеет норм запросы делать
Mike
fetch('api-resource').then(res => res.json()).then(json => <обработай json и делай че хочешь>)
Mike
чем не аякс?
Roman
скорее всего у меня просто терминология хромает и я просто неправильно интерпретирую "AJAX"
Mike
AJAX = Async Json and XML насколько я знаю
Roman
Asynchronous JavaScript and XML
Mike
ну почти)
Roman
в моей интерпретации AJAX это всегда была технология "нам нужно дорисовать контент, поэтому мы, не перезагружая сайт целиком, просим у сервера отрендерить нам лишь нужную часть HTML'а и вставляем её потом в приложение"
Mike
нее
Roman
бля))
Mike
идея в том, что нам надо дорисовать контент, так что давайте попросим его у сервера, а потом подумаем, как его нарисовать
Roman
хммм
Mike
а вот в каком формате мы попросим зависит от того, какая моча нам в голову ударила сегодня
Mike
можно попросить хтмл, можно джейсон, можно тапком по ебалу
Roman
просто суть в том что от сервера мы получаем только JSON и никак не HTML
Mike
да получай что хочешь, ты ж сам его пишешь)
Mike
что тебе удобнее то и шли
Mike
(но советую json, а то загнобят)
Roman
ну вот у нас есть со стороны клиента модель которая рендерится в vue-for-each="item in items". items в данном случае и есть модель, которую мы заполняем данными из JSON'а
Mike
ннннууу
Mike
и в чем вопрос?
Roman
теперь если мы рендерим это для crawler'а мы же в случае с prerender.io загружаем это дело всё в headless browser и получаем конечный статик html
ℝei
возможно ты просто не понял, что это 2 разных сервера, не бэк с апи рендерит html, а отдельный сервер на ноде рендерит vue
Roman
проблема только что prerender.io не дожидается асинх. погрузки в модель данных
Mike
в конструкторе сервиса или чего там, скоупа короче, где item, ты делаешь let item if( window.item ) item = window.item else fetch(<api-url/bff-proxy-url>).then(res => res.json()).then(json => item = json)
Mike
лан кажется рей тоже в теме
Mike
так что я пошел про раст читать
Mike
а он тебе если че пояснит за сср
ℝei
ну яж кинул примеры по вью) там все детально описано
Roman
ладно ребята, не буду я вас тероризировать своим невежеством)) мне действительно стоит почитать по теме SSR в SPA с использованием Vue
ℝei
https://ssr.vuejs.org/
ℝei
вот отсюда начни
Roman
👍🏻
ℝei
даже переведена и актуальна)
Roman
спасибо большое