WordPress + Elementor kontra Craft CMS 5: trzy identyczne strony, ten sam serwer, pomiar TTFB, SQL i Lighthouse

Trzy strony firmowe, przebudowane wcześniej na WordPressie z darmowym Elementorem, zbudowaliśmy od zera w Craft CMS 5: ta sama treść, te same pliki WebP, wygląd 1:1, ten sam serwer. Craft wysyła 5 KB zamiast 97 do 129 KB JavaScriptu i robi mniej niż połowę zapytań SQL przy podobnym TTFB. Te same strony jako typowy WordPress z 9 do 21 wtyczkami miały Lighthouse mobile 30 do 72.

  • 5 KB zamiast 97 do 129 KB JavaScriptu na podstronach z Elementorem
  • 34 do 54 zamiast 83 do 117 zapytań SQL, 4,5 do 5,8 zamiast 6,9 do 7,4 MB pamięci
  • TTFB 37 do 49 ms w Craft, 42 do 52 ms z Elementorem, 19 do 28 ms bez wtyczek
Dwa panele obok siebie, po lewej WordPress + Elementor, po prawej Craft CMS w pomarańczowej ramce. W każdym trzy paski: JS od 97 do 129 KB i 5 KB, SQL od 83 do 117 i od 34 do 54, pliki PHP od 1057 do 1290 i od 546 do 558; paski Craft są krótsze, pasek JS prawie znika

Trzy strony firmowe po przebudowie na WordPress 7.1 + Elementor 4.3 (free) + własny motyw Tailwind, porównane z Craft CMS 5.11

Wyzwanie

Trzy strony firmowe przebudowaliśmy wcześniej od zera na WordPressie: darmowy Elementor jako narzędzie edycji dla klienta, własny motyw z Tailwind CSS, bez zbędnych wtyczek, wygląd 1:1 ze starymi stronami. Przy odbiorze padło pytanie, które słyszymy coraz częściej: czy nie lepiej od razu przejść na Craft CMS, na którym robimy strony B2B?

Zamiast opinii zbudowaliśmy te same trzy strony drugi raz, od zera, w Craft CMS 5, i zmierzyliśmy oba systemy w tych samych warunkach. Warunek: porównanie ma być uczciwe, czyli obie wersje od zera na Tailwind, bez wtyczek albo tylko z koniecznymi, ta sama treść, te same zdjęcia, ten sam wygląd.

Porównanie główne to WordPress z Elementorem, tak jak strony zostały oddane klientowi, kontra Craft z jedną wtyczką. Elementor pełni w tych stronach tę samą rolę co pole Matrix w rdzeniu Crafta: z niego klient składa podstrony z bloków.

Rozwiązanie

W Craft powstał model treści z polem Matrix i blokami odpowiadającymi widgetom motywu WordPress, schemat i import treści z kodu, szablony Twig i moduł, który przejął formularze, przekierowania 301, SEO, mapę witryny i wyszukiwarkę. Jedyna wtyczka to CKEditor, bo rdzeń Crafta nie ma edytora tekstu.

Oba systemy stały na tym samym obrazie PHP 8.3 z Apache, przy tej samej MariaDB 11.4 i tym samym php.ini z OPcache, bez cache stron (stan na 2026-11). Zmierzyliśmy czas odpowiedzi, czas PHP, pamięć, wczytane pliki i zapytania SQL, wagę i liczbę żądań w przeglądarce, Lighthouse na telefonie i komputerze, rozmiar instalacji i pliki PHP osiągalne z przeglądarki, a osobno koszt samego Elementora.

Wyniki

JavaScript na podstronie
5 KB w Craft, 97 do 129 KB w WordPressie z Elementorem
Zapytania SQL na stronę
34 do 54 w Craft, 83 do 117 w WordPressie
Czas odpowiedzi serwera (TTFB)
37 do 49 ms w Craft, 42 do 52 ms z Elementorem, 19 do 28 ms bez wtyczek
Pliki PHP osiągalne z przeglądarki
1 w Craft, 3 366 do 4 109 w WordPressie
Galeria 82 zdjęć na telefonie
91 pkt i LCP 3,5 s w Craft, 75 pkt i LCP 8,7 s w WordPressie
Lighthouse mobile typowego WordPressa
30 do 72 pkt przed przebudową, 81 do 100 po, w Craft 94 do 98

Jak pracowaliśmy

  1. Te same warunki

    Ten sam obraz PHP 8.3 z Apache, ta sama MariaDB 11.4, ten sam php.ini z OPcache, 512 MB na kontener, bez cache stron w obu systemach.

  2. Craft od zera

    Model treści z polem Matrix zamiast widgetów Elementora, schemat i import treści z kodu, szablony Twig, jedna wtyczka, reszta w module.

  3. Zgodność 1:1

    Te same pliki WebP i warianty zdjęć, te same adresy. Zrzuty pełnej wysokości na komputerze i telefonie: 82 pary, 78 bez różnicy wysokości, 4 z różnicą 1 px.

  4. Pomiar serwera

    Czas PHP, pamięć, wczytane pliki i polecenia SQL z każdego żądania; czas odpowiedzi z 50 żądań na adres po rozgrzaniu OPcache.

  5. Pomiar przeglądarki

    Waga i żądania w Chromium z pustą pamięcią podręczną, Lighthouse na telefonie i komputerze, po trzy przebiegi, mediana.

  6. Koszt Elementora

    WordPress z wyłączonymi wtyczkami i tym samym motywem jako dolna granica kosztu samego WordPressa na serwerze.

  7. Typowy WordPress

    Porównanie z naszymi pomiarami tych samych stron przed przebudową, gdy miały 9, 15 i 21 wtyczek.

Warunki pomiaru: co znaczy „uczciwie”

Wszystkie liczby pochodzą z naszego laboratorium: jedna maszyna, sześć kontenerów z tym samym obrazem PHP, jedna baza, pomiar z tego samego hosta. Bez opóźnień sieci czasy serwera są niższe niż w internecie; Lighthouse na telefonie symuluje wolne łącze 4G i słabszy telefon.

StronaZakresCo ciekawego
Strona 19 podstron, galeria 10 zdjęć, lightboxmotyw WordPress sam wyłącza JavaScript Elementora na stronach bez interakcji
Strona 212 podstron, 5 projektów z kategoriami, 2 formularze, wyszukiwarka11 własnych widgetów Elementora: slider, zakładki, karty obracane, filtr projektów
Strona 311 podstron, 308 zdjęć w galeriach, formularz, mapa po zgodzieanimacje wejścia Elementora, wtyczka WP Mail SMTP do wysyłki poczty

Wspólne dla obu systemów (stan na 2026-11):

  • obraz wordpress:php8.3-apache z pdo_mysql (PHP 8.3.36, Apache 2.4.69, mod_php, prefork),
  • ta sama instancja MariaDB 11.4 z konfiguracją domyślną,
  • ten sam php.ini: memory_limit 256M, OPcache 128 MB, max_accelerated_files 20000, revalidate_freq 2,
  • tryb produkcyjny (WP_DEBUG i devMode wyłączone), bez wtyczki cache, bez trwałego cache obiektów, bez {% cache %} w szablonach,
  • 512 MB pamięci na kontener.
FROM wordpress:php8.3-apache
RUN docker-php-ext-install -j2 pdo_mysql \
 && groupmod -o -g 1000 www-data && usermod -o -u 1000 www-data
WordPressCraft CMS
SystemWordPress 7.1.4Craft CMS 5.11.5.1
WtyczkiElementor 4.3.5 (darmowy), na stronie 3 także WP Mail SMTP 4.10.3CKEditor 5.9.0, jedyna
Kod stronywłasny motyw: PHP, widgety Elementora, Tailwind CSS 4szablony Twig, moduł PHP, Tailwind CSS 4

Treść przeniósł skrypt (eksport przez WP-CLI do JSON, import konsolowym poleceniem Crafta). Zdjęcia to te same pliki WebP z wp-content/uploads, warianty w tych samych wymiarach i z tą samą jakością co rozmiary obrazków motywu, a srcset, sizes, loading i fetchpriority jak w HTML WordPressa. Adresy takie same, łącznie z ukośnikiem na końcu; stare adresy przekierowują 301 w obu systemach. Na 82 parach zrzutów (1440 × 900 i 390 × 844) różnica wysokości strony wynosi 0 px na 78 i 1 px na 4: Craft liczy dla dwóch zdjęć wariant 803 zamiast 804 px. Menu, slider, zakładki, filtr, lightbox, formularze i mapa po zgodzie działają tak samo, a świeży odwiedzający dostaje w obu wersjach 0 ciasteczek i 0 połączeń z obcymi domenami.

WordPress z Elementorem czy bez

WordPress bez konstruktora stron to inna usługa: klient edytowałby w edytorze blokowym albo dostałby szablony bez swobody układu. Żeby było widać, ile kosztuje sam Elementor, zmierzyliśmy też WordPress z wyłączonymi wtyczkami (rdzeń i ten sam motyw, strony z kopii HTML, którą Elementor zapisuje w post_content). Ten wariant wygląda inaczej i służy tylko do pomiaru serwera. Wersja „WordPress bez Elementora, z szablonami jak w Crafcie” wysyłałaby praktycznie ten sam HTML, CSS i JS co Craft, więc jej nie budowaliśmy.

Pomiar po stronie serwera: plik auto_prepend_file w obu systemach, aktywny tylko z nagłówkiem pomiarowym, zapisuje czas PHP, szczytową pamięć, liczbę wczytanych plików PHP i licznik poleceń SQL na połączeniu samej aplikacji:

// WordPress
$sql = (int) $GLOBALS['wpdb']->get_var("SHOW SESSION STATUS LIKE 'Questions'", 1) - 1;
// Craft
$row = \Craft::$app->getDb()->createCommand("SHOW SESSION STATUS LIKE 'Questions'")->queryOne();
$sql = (int) $row['Value'] - 1;

Czas odpowiedzi (TTFB): curl z tego samego hosta, 20 żądań rozgrzewających OPcache, potem 50 mierzonych na każdy z pięciu adresów strony. Waga i żądania: Chromium, pusta pamięć podręczna, przewinięcie całej strony, 3 przebiegi. Lighthouse 12.8: telefon i komputer, 3 przebiegi na adres, mediana.

Po lewej dwie nałożone na siebie strony, jedna ciągłą, druga przerywaną linią. Po prawej siatka 82 kwadratów: 78 czarnych z podpisem 0 px i 4 pomarańczowe z podpisem 1 px, nad nią 1440 × 900 i 390 × 844

Serwer: mediana z pięciu adresów na stronę (laboratorium, stan na 2026-11)

Strona i system TTFB, mediana i p90 Pamięć PHP Pliki PHP na żądanie Polecenia SQL
Strona 1: WordPress + Elementor 42,0 i 44,4 ms 6,9 MB 1 057 83
Strona 1: WordPress bez wtyczek 19,0 i 23,7 ms 4,4 MB 502 31
Strona 1: Craft 36,9 i 40,3 ms 4,5 MB 546 34
Strona 2: WordPress + Elementor 52,4 i 56,7 ms 7,0 MB 1 205 117
Strona 2: WordPress bez wtyczek 28,4 i 36,5 ms 4,8 MB 504 46
Strona 2: Craft 48,9 i 50,9 ms 5,8 MB 552 54
Strona 3: WordPress + Elementor + WP Mail SMTP 48,6 i 54,2 ms 7,4 MB 1 290 98
Strona 3: WordPress bez wtyczek 19,6 i 22,1 ms 4,8 MB 504 32
Strona 3: Craft 48,1 i 51,2 ms 5,5 MB 558 38

Przeglądarka: suma pięciu adresów na stronę, pusta pamięć podręczna

Strona i system Żądania JavaScript i CSS Zdjęcia Bez zdjęć
Strona 1: WordPress 75 10 KB i 66 KB 1 064 KB 109 KB
Strona 1: Craft 54 10 KB i 25 KB 1 094 KB 46 KB
Strona 2: WordPress 129 421 KB i 89 KB 2 359 KB 962 KB
Strona 2: Craft 70 25 KB i 45 KB 2 650 KB 508 KB
Strona 3: WordPress 219 531 KB i 107 KB 2 633 KB 1 108 KB
Strona 3: Craft 132 25 KB i 45 KB 2 787 KB 504 KB

Lighthouse 12.8: mediana z trzech przebiegów na trzech adresach, TBT 0 ms i CLS 0 wszędzie

Strona i system Telefon: wynik Telefon: FCP i LCP Komputer: wynik Komputer: FCP i LCP
Strona 1: WordPress 98 1 054 i 2 332 ms 100 243 i 404 ms
Strona 1: Craft 98 752 i 2 327 ms 100 202 i 483 ms
Strona 2: WordPress 95 1 656 i 2 780 ms 100 405 i 749 ms
Strona 2: Craft 96 755 i 2 777 ms 100 323 i 643 ms
Strona 3: WordPress 89 1 652 i 3 760 ms 99 364 i 765 ms
Strona 3: Craft 94 1 054 i 3 079 ms 100 282 i 583 ms

Skąd biorą się różnice

W przeglądarce różnicę robi Elementor

Na podstronach stron 2 i 3 WordPress wysyła 97 do 129 KB JavaScriptu (jQuery 3.7.1, jQuery Migrate, frontend Elementora, runtime webpacka, przy animacjach także ich moduły), Craft 5 KB. Z sumy pięciu adresów Elementor i jQuery to 44, 442 i 581 KB. Strona 1 wyłącza JavaScript Elementora już w motywie, więc tam różnica to tylko CSS i 4 do 5 żądań mniej na podstronę. Fonty są w obu wersjach te same, a drzewo DOM w Craft ma o 4 do 14 % mniej węzłów, bez opakowań elementor-element.

Pliki stylów i skrypty Elementora ładują się w <head> i blokują wyświetlenie strony. Na wolnym łączu każdy taki plik dokłada czas do pierwszej treści (FCP), na telefonie 0,3 do 0,9 s. Animacje wejścia Elementora ukrywają elementy do czasu uruchomienia skryptów, więc w galerii 82 zdjęć największy element (LCP) czeka prawie 7 s. Rozbicie LCP w Lighthouse dla WordPressa: TTFB 451 ms, opóźnienie ładowania 1 238 ms, ładowanie 82 ms, opóźnienie renderu 6 961 ms, osiem zasobów blokujących render. Craft: jeden zasób blokujący i opóźnienie renderu 3 229 ms przy tej samej animacji wejścia, tylko bez czekania na jQuery.

Na serwerze Elementor podwaja czas WordPressa

Goły WordPress z tym samym motywem: 502 do 504 plików PHP, 31 do 46 poleceń SQL, 19 do 28 ms. Z Elementorem: 1 057 do 1 290 plików, 83 do 117 poleceń, 42 do 52 ms. W logu zapytań MariaDB (general_log, jedno wyświetlenie strony głównej strony 1) WordPress wysłał 71 poleceń, z czego 25 pytało o opcje, których w bazie w ogóle nie ma (domyślne ustawienia eksperymentów Elementora; bez trwałego cache obiektów WordPress pyta o nie przy każdym żądaniu):

SELECT option_value FROM wp_options WHERE option_name = 'elementor_…' LIMIT 1

Craft kosztuje na serwerze mniej więcej tyle co WordPress z Elementorem

Framework Yii 2, Twig i warstwa elementów to około 550 plików PHP na żądanie i 30 do 55 poleceń SQL, czyli 37 do 49 ms. Z 29 poleceń na stronie głównej strony 1 większość to konfiguracja (sekcje, typy wpisów, układy pól, wolumeny, warianty zdjęć), reszta to zapytania o elementy. Mniejsze zużycie pamięci (4,5 do 5,8 MB) wynika głównie z mniejszej liczby wczytanych plików. Craft nie jest więc „szybszy od WordPressa”: goły WordPress przygotowuje stronę dwa razy szybciej niż oba porównywane systemy.

Zdjęcia waży każdy system inaczej

Na stronach 2 i 3 Craft ma więcej bajtów zdjęć, a mniej wszystkiego innego. Dlatego porównujemy wagę osobno ze zdjęciami i bez nich; powód opisuje druga pułapka niżej.

Wykres słupkowy TTFB w milisekundach dla stron 1, 2 i 3. W każdej grupie trzy słupki: WordPress core, czyli bez wtyczek, przerywaną linią 19, 28 i 20 ms, WordPress + Elementor na czarno 42, 52 i 49 ms, Craft CMS na pomarańczowo 37, 49 i 48 ms

Wyzwania, które pokonaliśmy

Galeria w Crafcie: 439 zapytań SQL na jedną stronę

Strona galerii z 82 zdjęciami, każde z srcset z czterech wariantów, miała w pierwszej wersji 439 poleceń SQL i TTFB 106 ms, więcej niż WordPress z Elementorem. .eagerly() ładuje zasoby jednym zapytaniem, ale $asset->getUrl('wariant') szuka gotowego wariantu w tabeli imagetransformindex osobnym zapytaniem dla każdego zdjęcia i każdego wariantu. Jedna linia w szablonie ładuje indeks wariantów dla całej galerii naraz:

{%- set images = block.images.eagerly().all() -%}
{%- do craft.app.imageTransforms.eagerLoadTransforms(images, ['medium', 'large', 'thumbnail', 'mlarge']) -%}

WordPress ma w tej samej galerii swoją wersję problemu N+1: dwa zapytania na zdjęcie (SELECT * FROM wp_posts WHERE ID = … i zapytanie o meta). Wstępne wczytanie zdjęć galerii zmniejsza je w teście, bez zmiany motywu klienta:

add_action( 'elementor/frontend/widget/before_render', function ( $widget ) {
    if ( 'theme-gallery' === $widget->get_name() ) {   // nazwa widgetu galerii motywu
        _prime_post_caches( wp_list_pluck( (array) $widget->get_settings( 'gallery' ), 'id' ), false, true );
    }
} );
Galeria 82 zdjęć (strona 3)TTFBPolecenia SQL
WordPress + Elementor, jak oddany66,8 ms260
WordPress, wstępne wczytanie zdjęć (test)61,7 ms98
Craft, pierwsza wersja szablonu106,0 ms439
Craft, warianty jednym zapytaniem58,2 ms33

Na stronie 1 to samo: lista projektów z 67 do 34 poleceń, galeria z 62 do 33. Szablon „działa” w obu systemach także bez tego.

Ta sama jakość, inne bajty

Warianty z tych samych oryginałów WebP, w tych samych wymiarach i z tą samą jakością (80 i 82) są w Crafcie o 8 do 11 % większe (strona 1: 4,3 i 4,8 MB wszystkich wariantów, strona 3: 47,8 i 51,6 MB). WordPress zmniejsza filtrem Triangle z lekkim wyostrzeniem, Craft (biblioteka Imagine) domyślnym filtrem Imagicka. Do tego Craft przy wgrywaniu spoza panelu domyślnie ponownie kompresuje plik: wszystkie 32 oryginały strony 1 miały po imporcie inne bajty niż w WordPressie, dopóki tego nie wyłączyliśmy:

$asset->sanitizeOnUpload = false;   // pliki z WordPressa są już oczyszczone; inaczej Craft zapisuje WebP od nowa

Imagick nie mieści się w memory_limit

Pamięć ImageMagicka nie liczy się do limitu PHP i w jednym procesie nie jest zwalniana między obrazami. Import 308 zdjęć i pierwsze wejście na galerię (warianty generowane przy wyświetlaniu, opcja generateTransformsBeforePageLoad) kończyły się w kontenerze 512 MB zabiciem procesu, bez odpowiedzi dla curl:

exit 137

Przy około 1 100 wariantach w jednym procesie ImageMagick zgłaszał:

cache resources exhausted ... @ error/cache.c/OpenPixelCache/3931

WordPress tworzy rozmiary przy wgrywaniu, jeden obraz na żądanie. W Crafcie warianty generujemy z góry osobnym poleceniem w jednorazowym kontenerze CLI z większym limitem:

docker run --rm -m 2g ... cs-cms-php:8.3 craft site/import/transforms   # jednorazowy kontener CLI, ten sam obraz

Motyw WordPress bez Elementora: błąd krytyczny

Przy pomiarze „WordPress bez wtyczek” strona 1 zwracała 500:

PHP Fatal error:  Uncaught Error: Class "Elementor\Plugin" not found in /var/www/html/wp-content/themes/<motyw>/inc/elementor.php:161

Winny był hook wp_print_footer_scripts, który wyłącza JavaScript Elementora na stronach bez interakcji. Motyw zbudowany pod konstruktor stron jest z nim związany mocniej, niż widać w panelu; do pomiaru zdjęliśmy ten jeden hook tymczasowym plikiem w mu-plugins.

Ponowne schema/apply w Craft 5 kasowało treść

Craft 5 zapisuje wartości pól w kolumnie JSON elements_sites.content pod UID elementu układu pola, nie samego pola. Skrypt schematu, który przy każdym uruchomieniu tworzył nowe elementy układu, po drugim przebiegu „gubił” wszystkie teksty: w bazie były, ale pod starymi UID, a resave/entries utrwalał stratę. Poprawka: przejmować UID istniejących elementów układu. Ważne dla każdego, kto trzyma schemat Crafta w kodzie.

Tekst z Elementora to nie tekst ze strony

Elementor zapisuje surowy HTML, a WordPress przy wyświetlaniu przepuszcza go przez wptexturize: dywiz między słowami staje się półpauzą (–), proste cudzysłowy drukarskimi. Import z danych Elementora dałby inne znaki niż na żywej stronie, więc teksty i tytuły strony 2 przenieśliśmy z wyrenderowanego HTML.

Wyszukiwarka daje inne wyniki przy tej samej treści

WordPress szuka LIKE w post_content, gdzie Elementor trzyma kopię HTML strony razem z tekstami alternatywnymi i nazwami plików zdjęć. Craft szuka w indeksie słów z pól oznaczonych jako przeszukiwalne, a w Craft 5 pole domyślnie przeszukiwalne nie jest: wyszukiwarka znajdowała tylko tytuły. Po włączeniu indeksu dla tego samego słowa WordPress zwraca 6 stron, Craft 4; w dwóch słowo było tylko w nazwach plików zdjęć.

Cztery poziome paski poleceń SQL dla galerii 82 zdjęć: Craft 439, Craft z eagerLoadTransforms 33 na pomarańczowo, WordPress 260, WordPress z _prime_post_caches 98; przy paskach czasy 106, 58, 67 i 62 ms

Instalacja, bezpieczeństwo i wygoda edycji

WordPress (strony 1 do 3)Craft (strony 1 do 3)
Rozmiar kodu bez zdjęć173 do 184 MB: rdzeń 91 MB, Elementor 77 MB, WP Mail SMTP 10 MB (strona 3), motyw 0,3 do 0,4 MB192 MB: vendor 191 MB (Craft 42,5 MB, CKEditor 41,2 MB, biblioteki), kod strony 0,2 do 0,3 MB; po pierwszym otwarciu panelu 47 MB zasobów panelu
Pliki PHP w instalacji3 366 do 4 109 (rdzeń 1 316, Elementor 2 023, WP Mail SMTP 733, motyw 17 do 33)8 016 do 8 020 (vendor 8 000, moduł 6 do 9, konfiguracja 8 do 9)
Pliki PHP osiągalne z przeglądarki3 366 do 4 109, cały katalog instalacji jest publiczny1 (web/index.php), reszta poza katalogiem publicznym
Pliki PHP wczytywane na żądanie1 057 do 1 290541 do 560
Baza13 tabel (strona 3: 17), 1,0 do 9,3 MB71 do 72 tabel, 5,0 do 7,0 MB
Aktualizacjez panelu, także automatyczne; rdzeń i wtyczki osobnoComposer i wdrożenie (na produkcji zmiany w panelu wyłączone), panel pokazuje dostępne wersje

Craft ma więcej plików PHP (biblioteki Yii 2, Twig, Guzzle, Symfony), ale w katalogu publicznym leży tylko jeden, więc żadnego innego nie da się wywołać adresem URL. W WordPressie każdy plik PHP wtyczki leży w katalogu publicznym; to typowa droga ataków przez dziurawe wtyczki.

WordPress + ElementorCraft
Składanie stronyprzeciąganie bloków na podglądzie, ustawienia w panelu bocznymformularz z blokami Matrix, podgląd na żywo obok
Swobodaduża: odstępy, kolory, typografia każdego widgetupola bloku i tabela „Układ”; wygląd trzymają szablony
Ryzyko zepsucia wygląduwysokie, każdy redaktor może nadpisać styleniskie
Wersjerewizje WordPressa i historia Elementorawersje robocze, rewizje i planowanie publikacji w rdzeniu
Wiele językówwtyczka, np. WPML albo Polylangw rdzeniu
Treść jako daneukład i treść razem w JSON w wp_postmeta i kopia HTML w post_contentpola i bloki jako osobne elementy, import i eksport bez parsowania HTML

Tabela „Układ” w Crafcie (wartości dla komputera, tabletu i telefonu) jest mniej wygodna niż suwaki Elementora. W zwykłym projekcie Craft układ siedzi w szablonach, a redaktor wybiera tylko warianty bloków; tu zostawiliśmy te ustawienia, żeby odwzorować strony 1:1 i dać redaktorowi podobną swobodę jak w Elementorze.

Dwie siatki plików PHP. Po lewej WordPress: pomarańczowa ramka katalogu publicznego obejmuje całą siatkę, podpis od 3366 do 4109. Po prawej Craft: większa siatka vendor z 8000 plików poza ramką, pomarańczowa ramka obejmuje tylko jeden plik web/index.php, podpis 1

Warunki idealne a typowa strona WordPress

To porównanie pokazuje oba systemy w warunkach idealnych: obie wersje zbudowane od zera, z jedną wtyczką po stronie Crafta i jednym konstruktorem stron po stronie WordPressa, bez gotowego motywu i bez wtyczek „na zapas”. Typowa strona WordPress wygląda inaczej. Mamy na to dane z tych samych trzech stron, zmierzonych przez nas przed przebudową na czysty WordPress (tabela niżej, ta sama numeracja stron; strona 3 przed przebudową bez pomiaru Lighthouse).

Po przebudowie każda strona ma jedną wtyczkę konstruktora, strona 3 dodatkowo wtyczkę do wysyłki poczty. Czysty WordPress i Craft dzieli kilka punktów Lighthouse i kilka milisekund na serwerze. Typowy WordPress, z którego te strony wyszły, dzieli od obu kilkadziesiąt punktów i do kilkudziesięciu sekund LCP.

Różnica nie leży w rdzeniu systemu, tylko w tym, co system pozwala dołożyć. Craft nie ma rynku gotowych motywów ani kreatorów stron: szablony Twig pisze się od zera dla każdego projektu, a na produkcji, gdzie zmiany konfiguracji w panelu są wyłączone, wtyczki wchodzą tylko przez Composer i wdrożenie, nie jednym kliknięciem redaktora. Strona w Crafcie zawsze powstaje więc w standardzie, który w tym teście nazywamy idealnym. WordPress pozwala zbudować stronę równie czysto, co pokazują nasze przebudowy, ale tego nie wymusza: wynik zależy od dyscypliny wykonawcy i od tego, co doinstaluje się później.

Skala Lighthouse mobile od 0 do 100 dla stron 1 i 2. Strona 1: typowy WordPress z wtyczkami przerywanym zakresem od 67 do 72, WordPress + Elementor czarnym zakresem od 98 do 100, Craft CMS pomarańczowym punktem 98. Strona 2: od 30 do 63, od 81 do 96 i 96

Te same trzy strony: przed przebudową, po przebudowie i w Craft (Lighthouse na telefonie)

Pomiar Strona 1 Strona 2 Strona 3
Wtyczki przed przebudową 9 (5 aktywnych) 15 21
JavaScript na podstronę przed 65 do 89 KB 807 do 810 KB 402 do 422 KB
Lighthouse przed, 3 podstrony 67, 72, 71 63, 50, 30 brak pomiaru
LCP najcięższej podstrony przed 11,9 s 64,8 s brak pomiaru
Po przebudowie na czysty WordPress, czyli „WordPress” w tym porównaniu 100, 99, 98 pkt, LCP 2,4 s 95, 81, 96 pkt, LCP 2,8 s 98, 91, 98 pkt, LCP 3,4 s
Craft w tym porównaniu, mediana 3 podstron 98 pkt 96 pkt 94 pkt

Co z tego wynika

  • W warunkach idealnych Craft i WordPress są blisko siebie. Craft wysyła o połowę mniej danych poza zdjęciami i pokazuje treść na telefonie szybciej, bo nie ma konstruktora stron. Na serwerze oba systemy mieszczą się w kilku milisekundach, a goły WordPress jest dwa razy szybszy od obu.
  • Craft nie jest szybszy od WordPressa jako takiego. Wymusza standard: szablony od zera, brak gotowych motywów i kreatorów, jeden publiczny plik PHP. W WordPressie ten standard zależy od dyscypliny wykonawcy, a typowa strona z kilkunastoma wtyczkami jest od niego daleko (Lighthouse na telefonie 30 do 72 zamiast 81 do 100).
  • Konstruktor stron kosztuje najwięcej. Elementor podwaja czas WordPressa na serwerze, dokłada jQuery i pliki blokujące wyświetlenie, a motyw zbudowany pod niego bez niego nie działa.
  • Problem N+1 dotyczy obu systemów. Galeria bez wstępnego wczytania zdjęć i ich wariantów robi setki zapytań w Crafcie i w WordPressie; o wyniku decyduje jedna linia kodu, nie system.
  • Dwie wersje obok siebie, przy identycznym obciążeniu, rozstrzygają spór szybciej niż dyskusja. Tak samo porównaliśmy PHP 7.4 i 8.2 w projekcie blokady sesji po PHP 8.2.

Dlatego przy nowej stronie firmowej, zwłaszcza w kilku językach, wybieramy Craft CMS, a dobrze zbudowanej, lekkiej strony na WordPressie nie przenosimy dla samej szybkości. Zmianę systemu strony planujemy wtedy, gdy obecnej strony nie da się utrzymać w tym standardzie.

Zastanawiają się Państwo, czy zostać przy WordPressie, czy przejść na Craft CMS? Zmierzymy Państwa obecną stronę i pokażemy, ile kosztują wtyczki i konstruktor stron, zanim padnie decyzja. Pierwszy krok to rozmowa wstępna.

Źródła

Wersje i liczby pochodzą z naszego laboratorium; opis funkcji z dokumentacji producentów (stan: 2026-11):

Dwie drogi wtyczki na serwer produkcyjny. U góry WordPress: z panelu wp-admin strzałka prosto na serwer z 21 kwadratami wtyczek. Na dole Craft CMS: composer require, pomarańczowa bramka deploy, serwer z jednym kwadratem wtyczki

Pierwszy krok: przegląd CMS dla WordPressa i Craft CMS

Przegląd CMS: WordPress i Craft CMS

Dla firm, których strona na WordPressie lub Craft CMS jest ważna dla biznesu, a agencja lub opiekun już się nią nie zajmuje: przed przejęciem, przed dużą aktualizacją albo po incydencie bezpieczeństwa.

  • Wersje CMS, PHP, bazy danych i serwera oraz stan ich wsparcia
  • Wtyczki i motywy: co jest rozwijane, co porzucone, a co warto wymienić
  • Aktualizacje: czego brakuje i jak ryzykowne jest ich nadrobienie
  • Kopie zapasowe: co jest zabezpieczane i czy odtworzenie zostało przetestowane
  • Bezpieczeństwo: dostępy do panelu administracyjnego, logowanie dwuskładnikowe, uprawnienia użytkowników i znane luki
  • Licencje CMS i płatnych wtyczek: jakie są i na kogo są zarejestrowane

Na tym etapie niczego na stronie nie zmieniamy. Własne motywy i wtyczki sprawdzamy pod kątem utrzymania i znanych luk, nie linijka po linijce. Przegląd dotyczy jednej strony, kolejne strony wyceniamy osobno.

Co zawiera wynik

Pisemny raport z ryzykami według priorytetu oraz plan przejęcia, aktualizacji i opieki. Raport należy do Państwa.

Zwykle 2 dni robocze

Zamów przegląd CMS

Powiązane sytuacje

  • Google ostrzega przed Państwa stroną, odwiedzający trafiają na obce strony albo dostawca hostingu zablokował konto? Izolujemy stronę, zamykamy lukę i usuwamy złośliwy kod w ciągu 24 godzin od uzyskania dostępu, także w weekend. Potem otrzymują Państwo pisemny raport.

  • Państwa system działa, ale nikt nie zna go dokładnie. Spisujemy aplikację, bazę danych, serwer i pocztę, oceniamy ryzyka, na piśmie rekomendujemy dalszą drogę, a na życzenie przejmujemy utrzymanie systemu.

  • Dla PHP 8.2 poprawki bezpieczeństwa kończą się 31.12.2026, dla PHP 8.1 i starszych już się skończyły (stan: 2026-10). Przenosimy rozbudowywane od lat aplikacje PHP, także z szablonami Smarty i frontendem w jQuery, na PHP 8.4 lub 8.5. Testujemy każdy etap.

Inne projekty

  • Lista dziewięciu nocnych kopii z godziną 01:30: dwie z długim czarnym paskiem i rozmiarem 285 MB, siedem z krótkim pomarańczowym znacznikiem i rozmiarem 751 B

    Kopia bazy MySQL miała 751 bajtów: uszkodzona tabela MyISAM i test przywracania

    Skrypt z crona przez 7 nocy zapisywał zamiast ok. 280 MB plik 751 B: jedna tabela MyISAM była oznaczona jako uszkodzona, mysqldump przerywał na LOCK TABLES, skrypt kończył się kodem 0, a cron wyrzucał komunikat. Odtworzyliśmy awarię, naprawiliśmy tabelę, przenieśliśmy bazy na InnoDB i wdrożyliśmy kopię, która co noc próbnie się przywraca i alarmuje.

  • Trzy tory z pola kropek kończą się na pomarańczowym murze z podpisem WAF; jeden tor od laptopa przechodzi przez przerwę do witryny sklepu

    Sklep zalewany przez boty, które udawały klientów

    Sklep na WooCommerce z 52 produktami ładował się bardzo długo albo wcale. Przyczyną była opłacana sieć botów, która wysyłała dziesiątki tysięcy żądań na godzinę, każde z innego domowego adresu, a każdy bot z osobna zachowywał się wzorowo. Nasi inżynierowie zatrzymali ten ruch na brzegu sieci, a gdy miesiąc później boty zmieniły taktykę, druga reguła zdjęła obciążenie w dwie minuty.

W 20 minut ustalimy, jaki pierwszy krok pasuje do Państwa systemu

Państwo opisują cel i obecny stan, my mówimy otwarcie, czy i jak możemy pomóc. Odpowiedź w ciągu jednego dnia roboczego, bez zobowiązań.

Telefon (niemiecki, polski, angielski) +48 501 250 220
E-mail E-mail

Dostępni: poniedziałek–piątek, 9:00–17:00 (czas środkowoeuropejski); wsparcie i awarie całą dobę (24/7)