Как миниприложение работает под капотом? Часть 2.А дальше нужно думать, как лучше организовать отдачу собранного json'а. Если я на каждое открытые веб-страницы (на каждый запрос на получение графа в бекенд) буду прогонять описанный выше алгоритм, то веб-страница будет открываться очень долго, секунд 10-15, но как вы видите открывается она практически моментально. Всё потому, что было принято решение раз в N времени (сейчас это раз в пол часа) прогонять описанную программу (называл её crawler, типо как в гугл хроме, типо крутой в общем), crawler собирает раз в пол часа актуальный json и сохраняет его в файл. Вы знали что в linux'е для периодического запуска команд существует утилита cron + crontab для её настройки? Потом уже на запрос от фронтенда "дай мне json представление графа" я просто буду отдавать готовый файлик, что стократно быстрее.Хорошо, мы умеем автоматически читать базу знаний из приватки и собирать по ней json граф, что дальше? Дальше вопрос как организовать HTTPS подключение к серверу. Поизучав информацию, я понял что можно воспользоваться Caddy (современный аналог nginx, только caddy АВТОМАТИЧЕСКИ сгенерирует мне сертификат и подпишет его, БЕСПЛАТНО😏). Плюс Caddyfile (аналог nginx.conf) выглядит ну гораздо приятнее и понятнее аналога от nginx.ХАРАШО, бекенд считай готов. Crawler раз в пол часа собирает json, Caddy по https умеет этот json отдавать (на самом деле я написал гошную приложуху в 1 эндпоинт, которая читает json файл и отдаёт его, а Caddy уже ходит за json'ом в эту гошную приложуху, но мне просто хотелось чтобы в этом большом проекте была частичка гошки xd, так то понятно что можно было этот самый json как статику отдавать напрямую через Caddy). Понятное дело что как Caddy, так и Crawler, так и гошная приложуха на 1 эндпоинт — всё завёрнуто в докер-контейнеры и деплоятся одной кнопкой через Makefile + dockercompose.Что с фронтендом? Как рисовать граф? Сначала я пытался понять как obsidian строит свои графы (ведь у обсидиана есть веб-версия, как-то же они это делают), но в итоге наткнулся на библиотеки для React'а для построения графа. Был выбор из нескольких, одна более красиво рисует граф но ужасно регистрирует касания и клики, вторая не так красиво отрисовывает но замечательно регистрирует пользовательский ввод. Очевидно смысла в красивом но неудобном графе нет, поэтому был выбран не самый красивый но наиболее удобный вариант (вы его видите в миниприложухе).Окей, есть библиотека для реакта, но я в душе не ебу как этот реакт устроен, как на нём писать, как устроено взаимодействие компонентов, и что самое главное как это потом деплоить в прод. И тут я бы мог встрять на пару месяцев, но мне на помощь пришла моя девушка, которая уже какое-то время изучает фронтенд на реакте, она помогла мне разобраться, так сказать, в базовых ценностях, да и компоненты поиска и инфопанели (которые вы видите в миниприложении) она верстала, за что ей большое спасибо.Фронтенд был самой сложной и мучительной частью, этот css это просто пиздец, 99999 свойств на один эффект и нахуй ни одно свойство не работает как надо. Плюс борьба с телеговской средой запуска веб-страниц, в которой если я открываю клавиатуру (например когда хочу в поиске что-то вбить), то нахуй рабочая область уменьшается в 2 раза и по пизде едет вся вёрстка. Тут уже пришлось 10 тысяч запросов в нейронку написать, чтобы на десять тысяч первый запрос она выдала рабочее решение, которое с помощью ебейшего костыля помогает обойти эту особенность телеграм-среды для веб-страниц.Кое-как допинали этот фронтенд до адекватного внешнего вида, теперь вопрос как это деплоить. Опять же поискав инфу, я узнал что React приложения компилируются в js+css+html, и потом на проде веб-сервером (nginx или Caddy) просто отдаются как статика. Интересно. В общем описываю докер-контейнер который на базе nodejs-имаджа собирает прям на прод-сервере мне статику и через docker-volume отдаёт её в папку, из которой уже Caddy отдаёт полученные файлы в качестве веб-страницы юзеру.
Оставить комментарий/отзыв