Jak zbudowaliśmy ten serwis
Za SynaptiCare stoi headless CMS Flotiq, statyczny generator Astro i Cloudflare Workers. Krótko o tym, jak z ponad 20 tysięcy rekordów powstaje szybka, statyczna strona.
SynaptiCare to baza ok. 20,5 tys. produktów leczniczych i ok. 75 tys. opakowań. Strona z taką ilością danych mogłaby być wolna i ciężka — postawiliśmy na architekturę, która pozwala jej być dokładnie odwrotną. Oto krótki opis techniczny dla ciekawych.
Dane mieszkają we Flotiq
Sercem serwisu jest Flotiq — headless CMS, czyli system zarządzania treścią, który nie narzuca żadnego wyglądu strony, a jedynie przechowuje dane i udostępnia je przez API. We Flotiq zdefiniowaliśmy typy treści odpowiadające strukturze rejestru leków: produkty, opakowania, substancje czynne i artykuły poradnikowe. Każdy rekord ma ustrukturyzowane pola — dawkę, postać, kod ATC, kategorię dostępności — dzięki czemu możemy je dowolnie łączyć i filtrować.
Zaletą tego podejścia jest rozdzielenie danych od prezentacji: te same treści mogłyby zasilać aplikację mobilną czy inny serwis bez żadnych zmian po stronie CMS-a.
Astro buduje stronę statycznie
Warstwę prezentacji zbudowaliśmy w Astro — generatorze stron statycznych. Podczas budowania serwisu Astro pobiera wszystkie dane z REST API Flotiq i generuje z nich gotowe pliki HTML: około 23 tysięcy podstron — po jednej dla każdego leku, substancji czynnej i kategorii ATC.
Kluczowa konsekwencja: gdy odwiedzasz stronę leku, serwer nie odpytuje żadnej bazy danych. Wysyła gotowy, wygenerowany wcześniej plik. Dlatego strony ładują się niemal natychmiast, a serwis nie ma typowych problemów z wydajnością przy dużym ruchu.
Cloudflare Workers serwuje pliki z brzegu sieci
Zbudowany serwis trafia na Cloudflare Workers, czyli infrastrukturę rozproszoną po serwerach na całym świecie. Strona jest serwowana z lokalizacji najbliższej użytkownikowi — zapytanie z Polski obsłuży serwer w Europie, a nie za oceanem — co dodatkowo skraca czas ładowania i uniezależnia serwis od awarii pojedynczego serwera.
Co dalej
Statyczna strona ma jedną wadę: żeby zaktualizować treść, trzeba ją przebudować. Rozwiązaniem są webhooki — planujemy, by każda zmiana danych we Flotiq (np. po synchronizacji z rejestrem leków) automatycznie uruchamiała nowy build. Aktualizacja całego serwisu sprowadzi się wtedy do kilku minut oczekiwania na przebudowę.
Naszym stałym punktem odniesienia jest wynik 100 punktów w Lighthouse — narzędziu Google mierzącym wydajność, dostępność i jakość stron. Statyczna architektura, minimalna ilość JavaScriptu i serwowanie z brzegu sieci sprawiają, że ten cel jest w zasięgu.
Ten artykuł ma charakter informacyjny i nie zastępuje porady lekarza ani farmaceuty.