Czy warto samodzielnie migrować sklep Magento na PHP 8?

18.10.2021 Kornel Kosoń
czy warto stawiać na migrację sklepu magento do php 8

Krótka odpowiedź brzmi nie. Dłuższą jest ten artykuł. W pogoni za coraz lepszymi wynikami, właściciele eCommerce’ów nieustannie wypatrują skoków wydajnościowych przychodzących z nowymi wersjami technologii. Jedną z nich jest PHP 8, język programowania wykorzystywany w ponad 80% aplikacji webowych, który jest również podstawą Magento i Adobe Commerce. Wraz z nową wersją PHP-a, nasuwają się również pytania na temat jej performance’u.

Najważniejsze z nich dotyczy rozmiaru skoku wydajności i tego, czy frameworki eCommerce’owe, takie jak Magento, mogą wykorzystać potencjał PHP 8. Po przeczytaniu tego artykułu dowiesz się m.in.:

  • czy i kiedy Magento rozpocznie wsparcie dla wersji PHP 8
  • czy warto samodzielnie przeprowadzić migrację bez oficjalnego wsparcia Magento
  • jak przygotować się do migracji na PHP 8
  • czy PHP 8 podniesie wydajność innych rodzajów aplikacji

O tym co, kiedy i jak robić z nową wersją PHP-a opowiedział nam Adrian Chojnicki, CTO Global4Net.

Czy Magento wspiera już PHP 8?

Na dany moment Magento 2 nie ma natywnego wsparcia dla PHP 8.0. Jednak zostało już ono umieszczone na roadmapie twórców. Jest ono przewidziane dla wersji 2.4.4, która ma zostać wydana w marcu 2022 roku. Jakiekolwiek wcześniejsze próby przejścia na nowszą wersję języka musiałyby się odbyć na własną rękę. Oznacza to, iż decydując się na migrację swojego sklepu Magento do PHP 8 programiści odpowiedzialni za obsługę Twojego eCommerce’u musieliby „wymusić” wsparcie frameworka, posiłkując się tylko dostępnymi im narzędziami. CTO Global4Net, Adrian Chojnicki tak ocenia tę sytuację:

Ze swojej strony polecałbym, żeby nie robić takiej migracji wcześniej, [bez oficjalnego wsparcia Magento – dop. red] ze względu na to, że wydajność jaką teraz byśmy otrzymywali byłaby dużo niższa, niż ta po wprowadzeniu wsparcia.

Dodaje, że jedyne działania jakie można by podjąć przed marcem 2022 roku to zwrócenie się do software house’u obsługującego Twój sklep i rozpoczęcie powolnej modyfikacji kodu. Takie działanie przygotuje Cię na moment wydania wsparcia dla PHP 8.

oficjalny roadmap przedstawiający datę wsparcia magento dla php 8

Migracja Magento do PHP 8 na własną rękę

Migracja Magento do najnowszej wersji PHP bez oficjalnego wsparcia od Adobe i kontrybutorów stanowi wyjątkowo duże wyzwanie. W normalnym scenariuszu, właściciele czekaliby na to, aż twórcy Magento zmodyfikują kod frameworka, aby był kompatybilny z PHP 8. Dopiero potem sprzedawcy mogliby rozpocząć modyfikacje swoich aplikacji opartych na platformie eCommerce. Samo dodanie wsparcia nie oznaczałoby jeszcze automatycznego przeniesienia sklepu na nową wersję języka.

Jeżeli natomiast zdecydowałbyś się na migrację Magento do PHP 8 na własną rękę, Twój zespół musiałby samodzielnie modyfikować kod bazowy, co wiązałoby się z dodatkowym nakładem prac. Kolejnym problemem jest modularna budowa frameworka.

Modularność Magento a migracja do PHP 8

Magento składa się z wielu wewnętrznych i zewnętrznych modułów – te drugie tworzone są przez zewnętrzne firmy. O ile programiści pracujący nad Twoją aplikacją mogą zmodyfikować kod stworzonych przez siebie autorskich modułów, to sprawa nie wygląda tak dobrze, jeśli chodzi o rodzaj zewnętrzny. Często zdarza się, iż jakaś firma przestaje wspierać wybrany moduł. Jeśli więc korzystasz z takich rozszerzeń, a chcesz dokonać migracji samodzielnie, nie będą one działały, aż ich twórcy nie zdecydują na aktualizację do wersji kompatybilnych z PHP 8.

Jeśli firma zewnętrzna, która stworzyła moduł używany w Twoim sklepie nie zdecyduje się go dalej rozwijać, Twoi programiści będą musieli dodać jego kod do scope’u aplikacji. W dużym skrócie chodzi tu o skopiowanie modułu na instancję sklepu i samodzielne zaktualizowanie jego kodu.

Ile czasu zajmuje przeniesienie modułu do scope’u aplikacji?

Mówiąc krótko, im bardziej rozbudowany jest moduł, tym więcej pracy nad kodem czeka programistów. Zmiana składni kodu wymuszona przez aktualizację do nowszej wersji PHP wymaga wielu dostosowań. Jednak wbrew pozorom nie jest to aż tak ciężkie przedsięwzięcie, ze względu na wtórność niektórych modyfikacji. Najczęściej chodzi wtedy o dodanie i zmiany w częściach składni kodu. Są one na tyle proste do zaimplementowania, że po wyjaśnieniu ich specyfiki przez senior developera, nawet osoby o juniorskim doświadczeniu będą mogły ich dokonać. Niemniej nadal będzie trzeba zainwestować czas całego zespołu developerskiego w przeniesienie modułu.

Oczywiście problem pojawia się, gdy moduł nie został napisany zgodnie ze standardami PSR. Są to zasady przyjęte przez developerów języka PHP mające na celu ustandaryzowanie i uporządkowanie procesu pisania aplikacji. Jeżeli moduł nie jest stworzony według tych standardów, Twoich programistów czeka refactoring aplikacji, co znacząco zwiększa nakład pracy. Dlatego musisz starannie dobierać moduły zewnętrzne do swojej aplikacji.

Na co zwracać uwagę przy doborze modułów zewnętrznych dla Magento?

Jeżeli chcesz być spokojny o dalsze wsparcie modułów, z których korzystasz, powinieneś wybierać te tworzone przez agencje z dużym doświadczeniem. Prawdopodobnie dodadzą one wsparcie PHP 8 do swoich modułów na Magento, zanim wyjdzie oficjalna łatka od twórców platformy.

Ważnym krokiem jest sprawdzenie, czy agencja z której modułów korzystasz jest renomowanym software housem. W przeciwnym razie możesz skazać się na dodatkową dostosowania kodu modułów do standardu PHP 8.

Jak przygotować się do migracji sklepu Magento na PHP 8?

Po wprowadzeniu wersji Magento 2.4.4 wspierającej wersję PHP 8.0 Ciebie i Twoich programistów czeka parę zadań.

Po pierwsze musisz zaktualizować wersję Magento w Composerze. Wiąże się to z przeprowadzeniem standardowej aktualizacji i nie różni się od zwykłych migracji Magento na wyższe wersje frameworka.

Jednak, aby móc korzystać z nowej wersji PHP, będziesz musiał zmodyfikować środowisko aplikacji. Oznacza to pracę DevOpsów, modyfikację dockerów, na których opartę są kontenery, zaangażowanie firmy hostingującej Twój sklep i inne działania – w zależności od infrastruktury Twojej aplikacji. Konieczna będzie również zmiana organizacji, czyli zainstalowanie paczek na komputerach programistów pracujących nad migracją. Jeśli wykorzystujesz dockery i Composera to wystarczy tutaj aktualizacja pipelinów. Nadal jednak migracja do PHP 8 będzie wymagała modyfikacja infrastruktury Twojego sklepu Magento.

Podsumowując, oprócz aktualizacji Twojej aktualnej wersji platformy Magento, Twoi programiści będą musieli również dostosować środowisko Twojego sklepu do nowych standardów.

Czy warto robić to wszystko dla nowego PHP-a?

Aby odpowiedzieć na to pytanie wykonaliśmy testy porównujące działanie aplikacji Magento na PHP-ie 7.4 i 8.0. Nie widzimy na razie dużego skoku wydajności – prawdopodobnie dlatego, że Magento nie jest jeszcze dostosowane do PHP 8. Platforma nie wykorzystuje nowych funkcjonalności i optymalizacji. Dlatego nie powinno nikogo zdziwić, że według naszych testów, wersja platformy działająca na PHP 8 jest nieco wolniejsza od tej operującej na 7.4.

Wykres przedstawiający poziomy wydajności dla wersji Magento operującej na PHP 8 i PHP 7.4

W tym momencie jeżeli byśmy przeznaczyli czas i środki na pracę programistów dostosowujących Magento pod przejście na PHP 8 na własną rękę, wyniki zdecydowanie nie byłyby opłacalne. Należy po prostu poczekać na oficjalne wsparcie od Adobe.

Test obejmował wysłanie stu requestów do karty kategorii. Dla wersji PHP 7.4 czas wykonania operacji wynosił maksymalnie 450 ms, dla 8.0 już 460. Jednostki testowe wykorzystywały OPCache, identyczny kod i kompilację. Dla upewnienia wykonaliśmy również test z JIT-em (Just-in-Time Compilation), który zgodnie z założeniami nie przyśpieszył działania aplikacji Magento.

Ze względu na dużą liczbę autorskich modyfikacji kodu jednostki testowej miarodajność testu jest raczej niska.

Skok wydajności na innych frameworkach bardziej zauważalny

Dla porównania wykonaliśmy również testy sprawdzającego liczbę wykonanych zapytań dla innych popularnych platform wykorzystujących język PHP. Rozmiar skoku performance’owego zależy tu ponownie od wprowadzenia oficjalnego wsparcia dla nowej wersji PHP-a.

Porównanie wydajności PHP 7.4 i 8.0 dla frameworków WordPress 5.6 laravel 8 i drupala W przypadku platformy WordPress widoczny jest skok o 20-30% przy wykorzystaniu PHP 8. Liczba zapytań wykonanych na sekundę wzrasta z 200 (dla PHP 7.4) do 240 (PHP 8.0). Jednak dla Drupala zauważamy regres wydajnościowy – z powodów takich samych jak dla platformy Magento.  Natomiast przy testach dla frameworka Laravel 8 widać minimalny wzrost performance’u.

Podchodzić do tego należy w następujący sposób: PHP 8 jest świeży i wykazuje pewne drobne skoki i obniżki w wydajności, ale należy patrzeć na niego bardziej przyszłościowo. Nowa wersja wprowadziła rozwiązania i standardy. Dodatkowo twórcy poczyścili błędy i niedociągnięcia długo zalegające w kodzie, przez co szansa na kolejne skoków wydajności jest jeszcze większa. Na razie nie odczujemy tego skoku, ale jeśli poczekamy, to perspektywa przyszłych wzrostów jest dużo lepsza niż w poprzednich wersjach PHP.

Czy PHP 8 daje nowe narzędzia wspomagające biznes?

Teoretycznie i przyszłościowo – tak. Jednym z nowych rozwiązań PHP 8 jest wcześniej wspomniany JIT. W PHP 8 pozwala on na przekompilowanie części kodu składni do kodu maszynowego i zacachowanie go, co jest dużo bardziej zrozumiałe dla procesora. Kod nie musi być znowu przekompilowany, tylko od razu mamy dostęp do jego wersji zrozumiałej dla maszyny.

Ta innowacja mogłaby spowodować, że PHP znacznie lepiej nadawałby się do obsługi raportów, obszarze w którym w przeszłości wcale nie był realnie traktowany. Nie oznacza to, że od razu warto byłoby używać języka do obsługi hurtowni danych, ale – patrząc przyszłościowo – mógłby posłużyć jako narzędzie do takich zadań. Dzięki temu można byłoby prowadzić bardziej ujednolicony kompetencyjnie zespół i zniknęłaby potrzeba inkorporowania dodatkowych języków do środowiska tego typu projektów. Jednak wprowadzenie JIT-u w PHP 8 nie pomaga w optymalizacji platform takich jak Magento.

To wszystko oczywiście tylko teoria. W praktyce nowy PHP to dobra nowina dla programistów, gdyż pozwala im na oczyszczenie kodu.  Oznacza to efektywniejsze przygotowanie narzędzi optymalizujących działanie aplikacji. Pomoże to także usunąć dług technologiczny i zmusi programistów do czytelniejszego zapisu kodu.

Czy nowa wersja PHP mogłaby również podnieść wydajność innych rodzajów aplikacji?

Ogólnie ujmując – tak. Zwiększenie wydajności aplikacji backendowych wpływa pozytywnie na aplikacje frontendowe z uwagi na redukcję czasu, podczas którego API zwraca informacje. W przypadku aplikacji natywnych na urządzenia mobilne (które działają online i komunikują się na bieżąco z serwerem) także będzie można odnotować szybsze działanie.

Jednak musimy pamiętać, że zmiany w poszczególnych wersjach PHP to kwestia kilkunastu, rzadziej kilkudziesięciu procent wydajności. Z drugiej strony aplikacje PWA oraz natywne wykorzystują API, które z założenia jest szybsze, niż aplikacja webowa, która poza obsługą logiki musi także dostarczyć informacje do interfejsu graficznego. Więc realnie ta różnica przy dobrze napisanej aplikacji nie będzie znacząca. Nawet wzrost o 10% wydajności przy API odpowiadającym np. w 220ms to redukcję ładowania stron wyłącznie o 20ms. Z punktu widzenia użytkownika wzrost ten nie będzie prawie nieodczuwalny.

Innymi słowy – zmiana wersji PHP z 7.x do 8.0 będzie suplementem, a nie lekarstwem na optymalizacje.

Co jeśli przed wsparciem od Magento pojawi się nowsza wersja PHP-a?

Być może czytając ten artykuł w Twojej głowie pojawiło się pytanie, co jeżeli przed wydaniem wsparcia od Magento dla wersji PHP 8.0 pojawi się nowsza wersja tego języka? Czy wtedy będziesz musiał czekać na kolejną odsłonę platformy eCommerce? Na szczęście nie. Magento od razu przewiduje wsparcie dla następnej wersji PHP 8, czyli wersji 8.1. Według oficjalnego stanowiska platforma od Adobe nie będzie w ogóle wspierała PHP 8.0. Jest to może najsilniejszy argument opowiadający się przeciwko samodzielnej migracji Magento na PHP 8.0. W końcu samo Magento ma w planach pominięcie tej wersji. Testy pokazują, jaki skok wydajności PHP 8 oferuje platformie Magento. Po prostu działa ona wolniej. Powodem jest brak wsparcia.

CTO Global4Net, Adrian Chojnicki przewiduje, że po wprowadzeniu oficjalnego wsparcia dla wersji 8.1. będzie można mówić o skoku wydajnościowym na poziomie 5-10% bez dodatkowych modyfikacji i optymalizacji kodu. Wobec tego nie pozostaje nic innego jak tylko czekać do marca. W międzyczasie dobrym ruchem byłaby wstępna optymalizacja przygotowująca do migracji na nowszą wersję Magento i PHP.

Cyfrowe newsy / Bądź na bieżąco

Od początku 2022 roku wchodzimy w skład Unity Group. Teraz zapisując się do naszego newslettera, będziesz na bieżąco z informacjami całej naszej organizacji.

    Wypełniając formularz wyrażasz zgodę na wysyłkę newslettera przez Unity S.A. z siedzibą we Wrocławiu. Zgodę możesz wycofać w każdej chwili. Więcej informacji na ten temat znajdziesz w naszej polityce prywatności.

    *Wymagane

    Andrzej-kurs-programowania

    Andrzej Szylar

    Chief Executive Officer

    E-mail:

    andrzej.szylar@unitygroup.com
    Magda2

    Magdalena Paczyńska-Kamienik

    HR Manager

    E-mail:

    magdalena.paczynska@unitygroup.com
    Aleksandra

    Aleksandra Bielawska-Clegg

    HR Business Partner

    E-mail:

    Michal

    Michał Duława

    New Business Developer

    E-mail:

    Katarzyna

    Katarzyna Zajchowska

    Marketing Partner

    E-mail: