26.08.2026 13:18

Newsfeed od środka: serwer wysyła dane, przeglądarka składa karty

⏱️ 3 min read
Share:

Od pierwszych dni Moonlight newsfeed działał tak, że serwer sklejał każdą kartę w gotowy HTML i wysyłał ją do przeglądarki w całości. To podejście ma jedną wielką zaletę — jest proste — i kilka wad, które rosły razem z platformą. Każde doładowanie strony niosło kilobajty znaczników zamiast samej treści. Każda zmiana na liście (nowy post, edycja, usunięcie) wymagała dłubania w gotowym HTML-u na żywo. A powiadomienia na żywo o nowych wpisach nie miały się jak wpiąć w listę, którą serwer traktował jak jednorazowy wydruk.

Dziś ta architektura się odwraca. Serwer wysyła czyste dane: tytuł, autora, okładkę, liczniki, uprawnienia widza. Karty składa przeglądarka — z komponentów, po jednym na każdy typ treści: post, komiks, rozdział, książka, fanart, utwór, album, wpis bonusowy i tak dalej, trzynaście typów w komplecie, łącznie z pełnym drzewem posta (media, podglądy linków, osadzone wideo) i wpisami bonusowymi z ich progami dostępu.

Dlaczego warto było to przejść

Najkrótsza odpowiedź: lista, która rozumie własną zawartość, umie dużo więcej niż wydruk.

Kiedy publikujesz post, karta pojawia się na górze feedu od razu, złożona z tych samych danych, które właśnie zapisał serwer. Kiedy edytujesz — karta odświeża się sama. Kiedy ktoś, kogo obserwujesz, opublikuje coś nowego, powiadomienie na żywo ma wreszcie którędy wjechać na listę. A ten sam feed, bez drugiej implementacji, daje się osadzić w innych miejscach platformy — pierwszym jest widget feedu w Kokpicie, który korzysta z identycznych kart i wspólnego silnika.

Jest i strona praktyczna: mniej danych w locie. Ta sama treść w formie czystych danych waży ułamek tego, co gotowy HTML, więc doładowywanie kolejnych stron feedu robi się lżejsze — co czuć zwłaszcza na telefonie.

Największe wyzwanie: żeby nikt niczego nie zauważył

Przepisanie kilkunastu typów kart to dużo okazji, żeby coś przestawić o piksel albo zgubić jakiś przycisk. Przyjęliśmy więc twardą zasadę: nowa karta ma wyglądać i zachowywać się identycznie jak stara, co do klasy CSS. Zbudowaliśmy do tego automatyczną kontrolę, która składa każdą kartę oboma sposobami i porównuje wyniki — różnica oznacza czerwony test, a czerwony test blokuje zmianę. Przy okazji tej drobiazgowej inwentaryzacji wyszło kilka zadawnionych błędów starego kodu: linki prowadzące w złe miejsca, okładka czytana z niewłaściwego pola, uśpiony błąd w wpisach bonusowych. Wszystkie naprawione.

Nowa ścieżka weszła za bezpiecznikiem: w każdej chwili można wrócić do poprzedniego renderowania jednym parametrem, a obie wersje działały równolegle przez cały okres prób. Stary kod nigdzie nie zniknął — pozostałe miejsca platformy korzystają z niego jak dotąd, a jego wymiana przyjdzie w swoim czasie, tym samym trybem.

Co dalej

Ten sam model — dane z serwera, karty w przeglądarce — będzie wchodził w kolejne zakątki platformy, między innymi wpisy bonusowe na stronach fanpage'y. Fundament już jest: jeden zestaw kart, jeden kontrakt danych, jedna lista, która wie, co wyświetla.

📚 Related posts

27.08.2026 20:55

Data, której nie cofniemy nawet my

Każdy certyfikat autorstwa dostaje datę zapisaną w blockchainie Bitcoina — takiej nie podważy nikt, my też nie. Sprawdzisz ją bez konta i bez Moonligh...
Continue reading →
27.08.2026 19:35

Twój kolor, wszędzie

Trzy tryby i siedem akcentów, wspólnych dla strony i Moonlight Animate. Motyw jedzie z kontem, profil pokazuje gościom Twoje kolory, a harmonogram sam...
Continue reading →
27.08.2026 18:31

Kto moderuje i na jakiej podstawie

Moderator to teraz osobna rola z własnym zakresem, a nie administrator w przebraniu. Odrzucenie treści wymaga powodu, który trafia do autora razem z d...
Continue reading →

📧 Stay up to date!

Join the waitlist to get notified about new Dev Blog posts and Moonlight platform launch.