Magento2 działa tak wolno na rozwoju hosta lokalnego

25

Niedawno zacząłem opracowywać nowe rozszerzenia lub modyfikacje magento2, a moje pierwsze wrażenie było koszmarem. Na każdą zmianę, którą wprowadzę, muszę czekać około 20-30 sekund? naprawdę?

Mówię o trybie programowania , wiem, że w produkcji z włączoną pamięcią podręczną i innymi rzeczami strona internetowa może być płynna. Ale kiedy pracuję z problemem rozszerzenia lub układu, muszę usuwać pliki statyczne, czyścić pamięć podręczną itp.

Moje pytanie brzmi: jak wszyscy programiści M2 pracują? ponieważ nie wierzę, że musisz odczekać 20-30 lat na odświeżenie strony ...

Moje środowisko: mój komputer jest „dobry” i5 z 8 GB pamięci RAM. Muszę pracować z systemem Windows, więc używam włóczęgi:

  • Wykorzystanie wszystkich 4 rdzeni procesora
  • Użyj 5120 MB pamięci RAM
  • Ubuntu / trusty64 - Ubuntu 14.04
  • Wersja PHP 7.0.12-1 + deb.sury.org ~ zaufany + 1
  • MariaDB - 10.1.18-MariaDB-1 ~ zaufany
  • Magento 2.1.2 jest instalowany tylko z próbkowanymi danymi (nie instaluje się więcej modułów)
  • (Zapytaj mnie, czy chcesz wiedzieć coś więcej)

Co się dokładnie dzieje? Zwykle M2 reaguje dobrze, powoli, ale dobrze, około 5-10 sekund, aby załadować strony, ale czasami (częściej niż czasami) po prostu blokuje się na zawsze! czasami jest to pierwsza strona, a czasem pliki css, js, html, ale zawsze problem dotyczy TTFB.

Widziałem też problem z kreatorem instalacji ... z angular.js te pliki trwają wiecznie ...

Te 2 zdjęcia dotyczą poruszania się po kreatorze konfiguracji.

http://imgur.com/Izoyuhj http://imgur.com/Vs5q8eT

Następnie kolejna nawigacja w katalogu frontend: http://imgur.com/oXYC52D

O co dokładnie pytam? Czy to normalne? pracujesz z tym czasem? Skomentowałem to z kilkoma kolegami i po prostu nie wierzymy, że muszę tak pracować? Czasami rozpaczam, że cały czas czekam na ekran ...

Jeśli ktoś poprosi mnie o pokazanie mu testu, takiego jak stworzenie nowego produktu lub coś w tym stylu, on po prostu wariuje ... Utworzenie nowego zamówienia, wypełnienie pól i każde pole wykonuje js trwający 5-6 sekund ...

Nie wiem, ale czuję się tak źle z tymi rzeczami ...

slayerbleast
źródło
Nie miałem okazji grać z magento 2: ale zakładam, że większość problemów z wydajnością pochodzi z twojego błędnego środowiska. Czy używasz virtualbox z włóczęgą czy czymś innym? Używanie wielu rdzeni w Virtualbox obniża wydajność. Czy uruchamiasz magento z folderu współdzielonego w Vagrant> Magento zapisuje pliki z powrotem do tego samego udziału, w którym występują problemy z wydajnością.
Olli Tyynelä
Być może zabraknie ci pamięci w systemie, co prowadzi do użycia wymiany na hoście, jeśli dasz błędne 5 gig. zwiększaj kwotę tylko, jeśli faktycznie jej potrzebujesz.
Olli Tyynelä
Duża część problemu polega na tym, że korzystasz z systemu Windows. Byłem na Windowsie od lat i było bardzo wolno z Vagrant / Magento. Wynika to z trybu synchronizacji plików, który nie jest na równi z nfs. Zacząłem podwójne uruchamianie na pulpicie Ubuntu, a moje strony Magento były bardzo szybkie, a chwilę później dostałem Maca, który korzysta z NFS i jest również bardzo szybki.
Shawn Abramson
Tak, jest wirtualny z Virtualbox. Dlaczego używanie większej liczby rdzeni musi obniżać wydajność? Zakładam, że oddanie wszystkich zasobów VM może być powolnym „moim komputerem”, ale szybszym moim VM… A folderem, którego używam, jest / var / www (Próbowałem nie używać foldera współdzielonego, to tylko „linux”, co jest uruchomione teraz). Jak mogę zobaczyć, co się nie udaje? Mogę wykonać top lub takie polecenia .... ale nie wiem, jak interpretować ...
slayerbleast,
@ShawnAbramson Tak ... zasugerowaliśmy instalację podwójnego rozruchu tylko po to, aby spróbować, ponieważ, jak powiedziałem, nie wierzymy, że programiści M2 pracują tak, jak ja obecnie hehe ...
slayerbleast

Odpowiedzi:

8

Próbowałem wszystkiego i jedyne, co działa, to maszyna wirtualna, która zapewnia bitnami. https://bitnami.com/stack/magento/virtual-machine

Poważnie, nie wiem co ma ten vm, ale idzie bardzo szybko. Próbowałem utworzyć moją maszynę wirtualną przy użyciu nowej instalacji Ubuntu, CentOS itp. Ale nie działa tak dobrze, jak ta maszyna wirtualna.

slayerbleast
źródło
Myślę, że główną różnicą w specyfikacji tej maszyny wirtualnej jest pamięć podręczna? Co w moim systemie Windows (przynajmniej na PHP 7 nie jest możliwe)
MackieeE
6

wyłącz scalanie i minimalizowanie CSS / JS:

Stores > Configuration > CSS Settings (Javascript Settings) > Merge CSS (Merge JS) > NO

Stores > Configuration > CSS Settings (Javascript Settings) > Minify CSS (Minify JS) > NO

Zobacz także ten przewodnik, jak poprawić wydajność Magento 2.

Konstantin Gerasimov
źródło
1
Domyślne ustawienia mają już te wartości. I to nie wpływa tak bardzo ...
slayerbleast
Czy połączenie byłoby przydatne na serwerze online? Więcej narzutów na przetwarzanie, a nie pobieranie?
Mohammed Joraid
Dlaczego wyłączyłeś CSS / JS Scalanie i minimalizowanie, to dosłownie opcja zwiększenia prędkości, wydaje mi się, że strzelasz sobie w stopę
John
4

Odkryłem, że tryb programisty wyłącza wszystko - co było przesadą. Są pewne aspekty, które chcę buforować, takie jak tłumaczenie. Na szczęście env.phpmożesz nadal ustawić, które pamięci podręczne mają być używane:

'cache_types' => 
      array (
        'config' => 1,
        'layout' => 0,
        'block_html' => 0,
        'collections' => 1,
        'reflection' => 1,
        'db_ddl' => 0,
        'eav' => 1,
        'customer_notification' => 1,
        'target_rule' => 1,
        'full_page' => 0,
        'config_integration' => 1,
        'config_integration_api' => 1,
        'translate' => 1,
        'config_webservice' => 1,
        'compiled_config' => 1,
      ),

To było powyższe, które postanowiłem buforować podczas opracowywania w Checkout, ponieważ był to w dużej mierze front-end. Zdecydowałem się nie buforować układu; Bloki i pełna strona, aby zobaczyć moje zmiany.

MackieeE
źródło
Stukrotne dzięki! Miałem ten problem, ponieważ zaktualizowałem Magento2 do nowszej wersji i wykonałem nową instalację. Najwyraźniej nadpisywało to moje env.php, co czyniło go nieskończenie wolnym. Ta poprawka do env.php to naprawiła. Dzięki jeszcze raz!
codiga
4

Sugestie Magento opublikowane po udzieleniu odpowiedzi na to pytanie. Czytanie innych odpowiedzi Myślę, że ta informacja może być pomocnym dodatkiem

http://devdocs.magento.com/guides/v2.2/extension-dev-guide/build/optimal-dev-environment.html

Optymalna konfiguracja

Poniżej znajduje się lista optymalizacji, które można wykonać na lokalnym komputerze programistycznym

  • Magento zaleca instalację i używanie najnowszej obsługiwanej wersji PHP 7 w celu zwiększenia wydajności.
  • Zamień bazę danych MySQL na Percona.
  • Upewnij się, że instalujesz i włączasz PHP OPcache.
  • Xdebug jest domyślnie wyłączony. Włącz tę funkcję tylko wtedy, gdy jej potrzebujesz, ponieważ wymaga ona dużej ilości pamięci i obniża wydajność. Konfiguracja xdebug.max_nesting_level musi być ustawiona na 200 lub więcej dla Magento. Możesz zwiększyć pamięć dostępną dla PHP, aby uzyskać wzrost wydajności przy włączonym Xdebug.
  • Jeśli potrzebujesz przykładowych danych, możesz je zainstalować przy użyciu kompozytora lub klonując repozytoria.
  • Aby przyspieszyć programowanie, wyłącz scalanie CSS i JavaScript.
  • Upewnij się, że buforowanie jest włączone (jest to zachowanie domyślne). Zasadniczo tylko pamięć podręczna stron i pamięć podręczna bloków powinny być wyłączone na czas programowania i ponownie włączone podczas testowania.
  • Sprawdzanie poprawności sygnatury czasowej Opcache powinno być zawsze włączone podczas programowania. Rozwój jest niemożliwy przy włączonym opcache i ponownej walidacji, ponieważ każda modyfikacja PHP wymagałaby resetu pamięci podręcznej.
Ian w Xantek
źródło
Dla mnie Opcache załatwiło sprawę. Teraz ładuje się dość szybko.
Amit Singh,
Inną rzeczą, na którą się natknąłem, jest to, że Xdebug może być domyślnie włączony, co również ma wpływ na wydajność. Sprawdź /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini Po zmianie Myślę, że musisz zrestartować okno dokowane kontenerów restart {web-container-name}
Ian at Xantek
1

Włącz pamięć podręczną.

Idź do <your magento 2 directory>/bini uruchom to polecenie magento cache:enable.

Wyczyść pamięć podręczną podczas edycji interfejsu użytkownika, aby zobaczyć, co edytowałeś.

Idź do <your magento 2 directory>/bini uruchom to polecenie magento cache:clean.

Moje referencje

Też jestem nowy w Magento 2. Mam nadzieję, że ktoś ma sposób na szybkie uczynienie Magento 2, nawet gdy pamięć podręczna jest wyłączona.

Zero
źródło
1
Nie wiem, czy jest to realne rozwiązanie ... Wszędzie mówi się o wyłączeniu pamięci podręcznej w trybie programowania ...
slayerbleast
6
Oczywiście, jeśli włączę pamięć podręczną, strona będzie działać szybciej ... ale każda zmiana będzie musiała wyczyścić pamięć podręczną ... nadal jest to strata czasu, myślę ...
slayerbleast
1

Moja instalacja w systemie Ubuntu 16.10 do programowania frontendów dla MNIEJ edycji :

  1. Ustaw tryb programisty:

    php bin/magento deploy:mode:set developer

  2. Włącz wszystkie pamięci podręczne:

    php bin / magento c: włącz

  3. Fronted Development Workflow ustawiony na kompilację po stronie serwera

  4. Po wprowadzeniu jakichkolwiek zmian w mniejszej liczbie plików

    chrząkać czysto

(Ostatnim razem, gdy udaje mi się zacząć - chrząkać zegarek z przeglądaniem na żywo i jest świetny)

BartZalas
źródło
0

Chcę tylko podzielić się moim osobistym doświadczeniem. Rozwiązaniem, które wymyśliłem, było zainstalowanie Xampp z php w wersji 7.0, ponieważ Magento nie jest w pełni kompatybilny z wyższą wersją Php. Próbowałem Bitnami Image wymieniony w odpowiedzi, ale nie działa, ponieważ spodziewałem się Xampp 7.0.23 Download Link

użytkownik3127648
źródło
Naprawdę? Z Xampp działa dobrze? Próbowałem tyle razy i to było okropne ... Jaka wersja Magento? Może tym razem poprawili wydajność. Spróbuję ponownie. I dlaczego obraz Bitnami nie działa zgodnie z oczekiwaniami?
slayerbleast
Mam wyżej dodany link Magento 2.1 i Xampp 7.0, porównując obraz Bitnami do Xampp 7.0 i znalazłem xampp łatwo i szybciej
user3127648 25.0917
0

Zwiększenie PHP memory_limitw pliku php.ini zrobi dobrą różnicę. Jednak nie sprawi, że będzie bardzo gładka (chociaż pozwoli zaoszczędzić czas).

Wartość domyślna to 512 mln. Na mojej lokalnej maszynie ustawiłem to na „-1” (nieograniczone) i daje to lepszy czas ładowania.

Zalecaną wartością jest wspomniana tutaj memory_limit = 2G .

Magento jest ciężki i potrzebuje płynnego sprzętu o wysokiej wydajności, takiego jak SSD :(

Binod - GoFundMonica
źródło
memory_limitnie ma żadnego związku z wydajnością. Jest to oczywiste z nazwy dyrektywy.
Danila Vershinin
@DanielV. Zastanawiałem się nad tym, ale potem znalazłem to: devdocs.magento.com/guides/v2.2/install-gde/prereq/... gdzie jest to 2G jako zalecana wartość
Binod - GoFundMonica
1
Ponownie jest zalecany z własnych powodów. Które absolutnie nie mają związku z wydajnością. Limit pamięci jest tylko po to, aby nie zatrzymać całkowicie systemu na wypadek, gdyby niektóre skrypty PHP (lub w tym przypadku moduły Magento) zjadły całą pamięć RAM serwera. Ustawienie wartości zbyt niskiej lub zbyt wysokiej nie ma absolutnie żadnego wpływu na wydajność. Jest to po prostu dyrektywa zapobiegawcza, aby system był bardziej bezpieczny w razie awarii. I jestem zaskoczony, że ludzie ślepo zakładają, że zwiększenie pamięci dla tego oznacza, że ​​dzięki tej dyrektywie osiąga się wydajność. Nie jest i nigdy nie będzie.
Danila Vershinin
Ciekawe, Daniel. Właściwie to na ślepo zakładałem. Jak możemy to wykazać? Jakieś wskazówki, którymi możesz mnie poprowadzić, abym mógł tego doświadczyć?
Binod - GoFundMonica
Ustaw go za nisko (np. 16 MB, co z pewnością nie wystarcza dla M2), a PHP zawiedzie z powodu błędu krytycznego. Zainstaluj tyle modułów, ile możesz i ustaw zbyt wysoką wartość (np. 4 GB), a wszystko będzie działało OK, dopóki nie pojawi się więcej osób odwiedzających witrynę, co z pewnością spowoduje, że Twój serwer osiągnie stan Brak pamięci. Nie potrzebujesz tych eksperymentów, jeśli po prostu czytasz dokumenty dotyczące tej dyrektywy. PHP cały czas działa w pamięci. Nie zamienia się na dysk ani nie robi takich śmiesznych rzeczy.
Danila Vershinin
0

Jeśli masz problemy z konfiguracją Vagrant, prawie na pewno będzie to, w jaki sposób Twoje foldery są udostępniane. Powinny być udostępniane przez NFS.

Po zadziałaniu z wieloma różnymi urządzeniami, zdałem sobie sprawę, że chociaż ustawiłem NFS w konfiguracji, to tak naprawdę nie działało i przejmował go standardowy system udostępniania VirtualBox.

Wróciłem do podstaw, skonfigurowałem proste pudełko LEMP i zainstalowałem tę wtyczkę:

https://github.com/Learnosity/vagrant-nfs_guest

Potwierdzony NFS działał i wszystko było dobrze.

engbmaso
źródło
0

Rzeczy, które mogą przyspieszyć konfigurację Magento 2 na lokalnym serwerze lub ogólnie na dowolnym serwerze.

  1. Zminimalizuj JS i CSS
  2. Użyj aplikacji buforującej, takiej jak Redis lub Memcached.
  3. Włącz całą pamięć podręczną, taką jak block_html, układ, page_cache itp. Dostarczone przez Magento 2.
  4. Scal CSS i JS
  5. Włącz produkty płaskie i kategorie.

Teraz, gdy w środowisku programistycznym opróżniasz tylko potrzebną pamięć podręczną zamiast opróżniania całej pamięci podręcznej, aby zapobiec całej odbudowie pamięci podręcznej.

Sourabh Kumar Sharma
źródło
0

Główny powód, dla którego magento2 działa wolno w trybie programisty, jest związany z tysiącem plików statycznych i skompilowanych generowanych w locie.

Istnieją na to 3 rozwiązania:

  • Zamontuj cały katalog za pomocą NFS (SSD jest nadal obowiązkowy).

  • Zamontuj tylko katalog aplikacji (bez względu na to, jaki sprzęt będzie działał poprawnie), ale stracisz dostęp do katalogu / vendor na komputerze-hoście.

  • Zamontuj cały projekt za pomocą rsync i wyklucz katalogi, w których generowane są pliki (pub / static, wygenerowany / kod itp.).

Zrobiłem tę pracę, spróbuj: https://github.com/zepgram/magento2-fast-vm/

Benjamin Calef
źródło