Powrót do strony głównej

Realizacja techniczna osi czasu TV lat 90. bez deweloperów | Analiza

Techniczny rozbiór tworzenia interaktywnej osi czasu rosyjskiej telewizji lat 90. Realizacja bez frameworków, optymalizacja zawartości medialnej, walka z OOM Killer w Kubernetes. Szczegółowa analiza rozwiązań dla deweloperów middle/senior.

Interaktywny dom TV lat 90.: jak zebrali bez budżetu i deweloperów
Advertisement 728x90

# Interaktywna oś czasu TV lat 90.: realizacja techniczna bez budżetu i programistów

Zespół projektantów i redaktorów bez żadnego etatowego programisty stworzył masshtabowy projekt webowy o ewolucji rosyjskiej telewizji. Interaktywny dom z 108 oknami, odwrócony scroll i własny CMS zostały zrealizowane w pół roku na czystym JavaScript z zerowym budżetem. Rozkładamy techniczne rozwiązania, które zapewniły stabilną pracę nawet w Safari.

Architektura bez frameworków: dlaczego zrezygnowano z React

Projekt wystartował z świadomej rezygnacji z nowoczesnych frontendowych frameworków. Główny argument — brak profesjonalnych programistów w zespole. Kierownik designu, który wziął na siebie realizację techniczną, używa sieci neuronowych jako głównego narzędzia do pisania kodu. Vanilla JS stało się jedyną możliwością kontrolowania jakości generowanego przez AI kodu.

Kluczowe decyzje architektoniczne:

Google AdInline article slot
  • Odwrócony scroll za pomocą flex-direction: column-reverse
  • Dynamiczna oś czasu z efektem fish-eye
  • Moduły ES6 zamiast bundli
  • Własny odtwarzacz wideo bez zewnętrznych zależności

Ten podejście dało kluczową przewagę: bezpośrednie ładowanie modułów przez przeglądarkę bez hydratacji i overheadu runtime. Przy pierwszym renderze pakiety ważą 47 KB zamiast typowych 200+ KB w aplikacjach React. Dla projektu z wysokim obciążeniem graficznym stało się to warunkiem koniecznym wydajności.

Optymalizacja mediów: z 35 sekund do 2,5

Początkowe ładowanie strony trwało 35 sekund z powodu 108 wysokiej jakości obrazów wnętrz. Rozwiązanie oparto na wielopoziomowej obróbce:

  • Automatyczna konwersja PNG na WebP/AVIF przy wgrywaniu przez panel admina
  • Generowanie blur-up podglądów (szerokość 50px) dla natychmiastowej wizualnej informacji zwrotnej
  • Strumieniowa obróbka obrazów zamiast buforowania w pamięci
  • Ograniczenie równoległych konwersji do dwóch procesów
// Fish-eye efekt dla osi czasu
const distanceFromCenter = Math.abs(timelineCenterY - elementCenterY);
if (distanceFromCenter < fishEyeRadius) {
    const ratio = 1 - (distanceFromCenter / fishEyeRadius);
    const scale = 1.0 + (maxScale - 1.0) * ratio;
    element.style.transform = `scale(${scale})`;
}

Krytycznym punktem stał się OOM Killer w Kubernetes: Sharp przy równoległej obróbce AVIF wyczerpywał limity pamięci. Poprawka obejmowała obniżenie parametru effort do 2 i przejście na strumieniową obróbkę. Rezultat — kompresja PNG 4,7 MB do WebP 152 KB (31x) bez utraty jakości wizualnej.

Google AdInline article slot

Preloader jako część koncepcji

Tematyczny preloader z zakłóceniami TV zrealizowany przez Canvas zamiast plików wideo. To rozwiązanie dało trzy kluczowe zalety:

  • Brak widocznej pętli (generowanie szumu przez Math.random())
  • Mniejszy rozmiar (310 linii JS vs 5+ MB dla WebM)
  • Możliwość ponownego użycia logiki
// Generowanie zakłóceń dla nagłówka
function generateHeadlineNoise() {
    const frames = [];
    for (let i = 0; i < 4; i++) {
        frames.push(generateNoiseFrame());
    }
    document.documentElement.style.setProperty('--noise-frames', frames.join(','));
}

Preloader jednocześnie rozwiązuje zadanie techniczne — pozwala zebrać wszystkie ciężkie assety przed wyświetleniem interfejsu. Dom pojawia się natychmiast, bez „rozmycia” tekstur. Ten sam algorytm generowania szumu jest używany do easter egga przy najechaniu na nagłówek.

Backend: od pliku JSON do Kubernetes

Początkowa realizacja przechowywała dane w data.json na VPS za 5 USD. Przejście na korporacyjną infrastrukturę wymagało:

Google AdInline article slot
  • Zamiany JSON na MariaDB
  • Integracji z MinIO zamiast lokalnego magazynu
  • Konfiguracji Nginx jako reverse-proxy
  • Adaptacji pod pipeline CI/CD GitLab

Wizualny edytor w panelu admina pozwala projektantom edytować treści bezpośrednio w siatce — klikasz na okno, zmieniasz parametry. To rozwiązanie jest kluczowe dla nietechnicznych uczestników projektu. Wszystkie pliki medialne są przetwarzane automatycznie: Sharp generuje WebP, AVIF i blur-up podglądy bez udziału człowieka.

Co ważne

  • Odwrócony scroll przez column-reverse jest tańszy w realizacji niż animacje JS i działa we wszystkich przeglądarkach
  • Strumieniowa obróbka obrazów zapobiega awariom OOM nawet na słabych serwerach
  • Canvas zamiast wideo dla dynamicznych efektów oszczędza ruch i poprawia percepcję jakości
  • Własny odtwarzacz wideo bez bibliotek zmniejsza rozmiar bundla o 120 KB
  • Blur-up podglądy tworzą iluzję natychmiastowego ładowania przy realnej oszczędności ruchu

Techniczny dług projektu jest minimalny: 92% kodu napisano za pierwszym razem przez sieci neuronowe, pozostałe 8% to ręczne poprawki dla Safari. Przejście na nowoczesne narzędzia (Kubernetes, AVIF) nastąpiło bez zwiększenia budżetu dzięki wykorzystaniu korporacyjnej infrastruktury. Główny wniosek: nawet nietechniczny zespół może stworzyć złożony projekt webowy przy właściwym doborze stosu i skupieniu na optymalizacji zasobów.

— Editorial Team

Advertisement 728x90

Czytaj dalej