Własny silnik zamiast WooCommerce — co zyskał VEX Systems
Po migracji VEX Systems zyskał szybkość, kontrolę i niezależność od wtyczek. Podsumowujemy konkretne korzyści własnego silnika względem WooCommerce.
Granice gotowych platform e-commerce w sektorze B2B
Większość firm dystrybucyjnych rozpoczyna swoją obecność w sieci od najprostszego scenariusza: instalacji WordPressa z wtyczką WooCommerce. Na etapie sprzedaży kilkudziesięciu produktów do klientów indywidualnych takie rozwiązanie wydaje się rozsądne — jest tanie w uruchomieniu, ma gotowe szablony i tysiące wtyczek obiecujących dowolną funkcjonalność za kilkadziesiąt dolarów rocznie.
Problem pojawia się w momencie, gdy firma wchodzi na poziom profesjonalnej dystrybucji B2B. W przypadku VEX Systems — oficjalnego dystrybutora profesjonalnego oświetlenia scenicznego i systemów nagłośnienia marek FOS Technologies oraz iHOS — wymagania techniczne przerosły możliwości silnika opartego na wtyczkach:
- Ponad 897 zaawansowanych urządzeń AV w stałej ofercie oraz katalog części zamiennych przekraczający 20 000 indeksów.
- Rozbudowana matryca atrybutów technicznych: kąty świecenia soczewek, protokoły DMX/RDM, typy diod LED, pasma przenoszenia, waga, wymiary rackowe i zapotrzebowanie prądowe.
- Wielopoziomowe cenniki partnerskie: inne ceny dla instalatorów, klubów, teatrów, a inne dla klientów detalicznych.
- Konieczność bezpośredniej integracji z ERP (Subiekt GT): dwukierunkowy przepływ stanów magazynowych, cen netto w walutach EUR/PLN oraz rezerwacji sprzętu.
- Dual-channel: jednoczesna obsługa platformy hurtowej B2B (
vex-systems.pl) oraz sklepu detalicznego (vex.sklep.pl) na jednym, wspólnym zasobie danych.
Poniżej przedstawiamy szczegółową analizę architektoniczną: dlaczego WooCommerce zawiódł i jak stworzenie autorskiego silnika w Django zredukowało czas odpowiedzi serwera o 97%.
Architektoniczny koszmar: 42 wtyczki i piekło wp_postmeta
Głównym problemem WooCommerce nie jest sam kod PHP, lecz model danych wymuszony przez architekturę WordPressa. WordPress opiera się na strukturze EAV (Entity-Attribute-Value), w której wszystkie niestandardowe parametry produktów zapisywane są w jednej, gigantycznej tabeli wp_postmeta.
Gdy produkt posiada 20 parametrów technicznych, w bazie powstaje 20 osobnych wierszy dla każdego produktu. Przy katalogu liczącym 1 000 produktów i kilku wersjach językowych tabela osiąga setki tysięcy wierszy. Każde filtrowanie produktów (np. „ruchome głowice o mocy >300W z protokołem Art-Net”) wymagało wykonania wielokrotnych złączeń (JOIN) na tej samej tabeli.
-- Typowe zapytanie WooCommerce przy filtrowaniu kilku parametrów
SELECT p.ID FROM wp_posts p
INNER JOIN wp_postmeta pm1 ON p.ID = pm1.post_id AND pm1.meta_key = '_moc_led'
INNER JOIN wp_postmeta pm2 ON p.ID = pm2.post_id AND pm2.meta_key = '_protokol'
INNER JOIN wp_postmeta pm3 ON p.ID = pm3.post_id AND pm3.meta_key = '_kat_swiecenia'
WHERE p.post_type = 'product' AND p.post_status = 'publish'
AND CAST(pm1.meta_value AS UNSIGNED) >= 300
AND pm2.meta_value LIKE '%Art-Net%';
Efekt w praktyce?
1. TTFB (Time to First Byte) na poziomie 2.8 – 3.4 sekundy. Użytkownik czekał niemal 3 sekundy, zanim serwer w ogóle zaczął przesyłać pierwszy bajt strony.
2. Kaskadowe awarie przy aktualizacjach: Aktualizacja wtyczki do cen hurtowych potrafiła wyłączyć kalkulator kosztów dostawy InPost albo zepsuć przełącznik języków WPML.
3. Puchnięcie pamięci: Każde żądanie HTTP alokowało ponad 180 MB pamięci RAM na serwerze, co przy kilkunastu jednoczesnych użytkownikach dławiło procesor serwera VPS.
Nowy fundament: Python, Django i PostgreSQL
Podjęliśmy decyzję o całkowitym odcięciu się od WordPressa. Zbudowaliśmy dedykowany silnik oparty na Pythonie, frameworku Django oraz relacyjnej bazie PostgreSQL.
1. Czysty, znormalizowany model relacyjny
Zamiast wrzucać wszystko do jednego worka meta-danych, zaprojektowaliśmy ścisłą strukturę bazodanową:
- Tabela
Productz precyzyjnie otypowanymi kolumnami (power_watts,beam_angle_min,beam_angle_max,dmx_channels). - Natywne pole
JSONBw PostgreSQL dla specyficznych, rzadkich parametrów, indeksowane za pomocą indeksuGIN. - Czas wykonania złożonego zapytania filtrującego spadł z 840 ms do zaledwie 4 ms.
2. Dwukierunkowa synchronizacja z Subiekt GT
Zamiast powolnych webhooks i zewnętrznych integratorów obciążających serwer, stworzyliśmy dedykowany mikroserwis ETL. Skrypt w tle przetwarza stany magazynowe i cenniki bezpośrednio z bazy Subiekta, aktualizując platformę B2B w cyklach co 60 sekund z mechanizmem Safety Abort (jeśli feed zwróci błąd lub niekompletne dane, baza produkcyjna nie zostaje naruszona).
3. Płaski front bez ociężałego npm-bloatu
Zamiast instalować frameworki z 500 MB folderem node_modules (typu Next.js czy Nuxt), zastosowaliśmy komponenty JSX kompilowane pojedynczo przez esbuild. Każdy moduł to lekki, niezależny plik JS, który przeglądarka pobiera błyskawicznie i buforuje w pamięci podręcznej.
Twarde liczby: Porównanie przed i po migracji
Poniższa tabela przedstawia realne pomiary zarejestrowane na serwerze produkcyjnym VEX Systems przed i po wdrożeniu autorskiego silnika:
| Parametr wydajnościowy | WordPress + WooCommerce | Autorski silnik Django (Alex Media Lab) | Zmiana |
|---|---|---|---|
| TTFB (Time to First Byte) | 2 800 ms (2.8s) | 78 ms (0.08s) | -97.2% 🚀 |
| Pełne załadowanie strony (LCP) | 4 200 ms | 840 ms (< 0.9s) | 5x szybciej |
| Liczba wtyczek zewnętrznych | 42 wtyczki | 0 wtyczek (100% natywny kod) | Brak konfliktów |
| Zużycie RAM na zapytanie | ~190 MB | ~18 MB | 10x mniejsze |
| Koszt licencji wtyczek rocznie | ~3 800 zł / rok | 0 zł | 100% oszczędności |
| Czas synchronizacji z Subiektem | 15–30 minut (zawieszenia) | Masaż danych w < 12 sekund | W czasie rzeczywistym |
Dodatkowa wartość: Trójstopniowy model Opieka B2B
Wdrożenie własnego silnika otworzyło drogę do zaimplementowania unikalnej logiki biznesowej, której nie dało się stabilnie utrzymać na WooCommerce — zintegrowanych pakietów serwisowych Opieka:
- Opieka Standard: Dostęp do bazy wiedzy, aktualizacji firmware'u urządzeń DMX i podstawowej gwarancji dystrybutora.
- Opieka Priority: Gwarantowany czas reakcji serwisu do 24h, sprzęt zastępczy na czas naprawy oraz dedykowany opiekun techniczny.
- Opieka Managed SLA: Kompleksowy nadzór nad instalacją w klubie, teatrze lub hotelu, okresowe audyty fotometryczne i natychmiastowa wysyłka modułów zamiennych z magazynu w Warszawie.
Wszystkie te uprawnienia, powiązane z numerami seryjnymi zakupionych urządzeń, są weryfikowane automatycznie w panelu klienta w ułamku sekundy.
Podsumowanie: Czy Twoja firma potrzebuje własnego silnika?
Doświadczenie VEX Systems udowadnia, że w segmencie B2B platforma internetowa nie jest tylko „sklepem” — jest narzędziem pracy inżynierów, projektantów instalacji i dyrektorów technicznych.
Jeśli Twoi klienci tracą cierpliwość czekając na otwarcie karty katalogowej, a Twój zespół spędza godziny na ręcznym poprawianiu błędów między sklepem a systemem ERP, dalsze łatanie WordPressa kolejnymi wtyczkami jest tylko odsuwaniem problemu w czasie.
W Alex Media Lab projektujemy i wdrażamy dedykowane platformy cyfrowe, które eliminują dług technologiczny i budują przewagę konkurencyjną na lata.