web-dev-qa-db-fra.com

Magento 2 est terriblement lent (mode développeur)

Récemment, j'ai commencé à développer des projets magento 2.

J'ai d'abord essayé sur Windows avec xampp et c'était un gâchis ... chaque page de rafraîchissement était un cauchemar, environ 30 à 40 secondes pour charger la page. J'ai lu à ce sujet que les fichiers système Windows fonctionnaient si lentement avec magento à cause de sa grande structure, et l'article le plus souvent vous obligeait à utiliser Linux pour le développement sur des projets magento.

Le problème est que j'ai besoin de Windows pour des applications d'entreprise qui ne fonctionnent que sous Windows, j'ai essayé d'installer une machine virtuelle avec Virtualbox, cela s'est amélioré un peu ... mais le fait que je travaille sur une machine virtuelle m'a fait chier ...

La solution suivante, et je travaille actuellement, utilise vagant. D'accord, je me sens bien dans cette voie mais ça continue lentement ... 15-20s ... 

Ma configuration sur Vagrant est de 5120Mo (le pc a 8 Go) et utilise tout mon pc 4 cœurs. 

Je me sens tellement mal de travailler comme ça ... quand je travaillais sur mes projets précédents, avec symfony/Laravel/Codeigniter, c'était comme:

écrire quelques lignes de code, onglet au navigateur, F5, voir immédiatement les changements.

Sur M2: écrivez quelques lignes de code, onglet pour navigateur, F5, attendez ... attendez ... ok maintenant il rafraîchit la page, mais il n'est pas chargé, attendez ... attendez ... hmmm presque ... ok. Aucune modification mais j'ai nettoyé le cache ... ohhh je suppose que je devais aussi supprimer les fichiers statiques. Allez-y ... attendez encore ...

Mon dieu ... Il n'y a pas moyen que M2 aille plus vite? Je demande seulement des 5 ou quelque chose comme ça ... c'est juste que je me sens si bête que l'écran attend tout le temps ...

Pour les aclarations, je ne demande que le mode de développement, je a tenté Il fallait installer un autre projet de magento en mode de production pour tester les choses plus rapidement, puis tout irait bien, comparé au mode développeur ... parce que ... omg ... essayez simplement de faire un workflow de commandes encore et encore ... 

Eh bien, c'est tout ... La seule chose que je n'ai pas essayée est d'utiliser l'environnement Linux sur l'ordinateur ... mais c'est la même chose que d'utiliser vagabond ... Je ne comprends pas ... Comment développez-vous les développeurs M2? dans les développeurs frontend spéciaux ... Je ne crois pas qu'ils fonctionnent de la même manière que moi ... attendre 20sec pour charger les pages + nettoyer le cache + supprimer les fichiers statiques, etc.

Détails: J'ai tout essayé avec vagrant mais ne m'améliore pas, je suis actuellement sur Ubuntu 15.04, Apache 2.4, PHP 5.6 (j'ai essayé 7 mais je suis toujours le même) mysql 5.6

C'est l'onglet réseau: http://i.imgur.com/HG7mbeX.pnghttp://i.imgur.com/HG7mbeX.png

17
slayerbleast

J'ai tout essayé et la seule chose qui fonctionne, c'est la machine virtuelle qui fournit bitnami. https://bitnami.com/stack/magento/virtual-machine

Sérieusement, je ne sais pas ce qui a cette vm, mais va très vite. J'ai essayé de créer ma VM en utilisant une nouvelle installation d'Ubuntu, CentOS, etc. Mais cela ne fonctionne pas si bien comme cette VM.

2
slayerbleast

Mise à jour 2018, Magento 2.2.4

Vagrant + Windows + Magento2 = désastre. Vagrant + Apple + Magento2 = désastre.

Ubuntu + Magento2 = cuisson au gaz.

Modules simples, par exemple un widget prend plusieurs jours de plus que les 2-3 heures attendues et il est impossible de se souvenir de ce que vous faites si l'ouverture d'une page prend une minute, en particulier si vous devez vider les caches, compiler, mettre à niveau ou autre chose cela devrait prendre pas de temps du tout.

C’est ce que j’ai pu constater en travaillant dans un bureau où les options sont Mac ou Windows. Après avoir passé une journée entière à essayer de modifier la directive de modèle et à ne pas effectuer une modification de configuration en 8 heures, je pensais essayer une machine sous Linux pour voir si j'étais devenu fou ou si ce dispositif vagabond était aussi utile que cela. fesses ivres dormant dans le parc en bas de la route.

La vieille machine Linux avec une mémoire RAM anémique, un ancien SSD, le stock Apache et aucun cache-cache compliquait la tâche sans problème. J'ai pu basculer entre les modes développeur et production sans effort et obtenir ce qui m'avait pris plusieurs jours à faire en quelques minutes.

La machine de travail était de la 8ème génération i7, la configuration Vagrant était bien le bébé de quelqu'un et beaucoup de temps avait été consacré à la construction de la bête. Pourtant, les plaques tectoniques bougent plus vite. Le vagabond et la virtualisation sont peut-être à la mode, mais cela ne sert à rien au développement M2. En fait, j’ai installé M2 et fait toute la configuration de la base de données et du serveur virtuel en moins de temps qu’il en faut pour construire une boîte Vagrant.

Pour ce qui est des performances, comme M2 sur une configuration Linux de base est 10 fois plus rapide que certains efforts maladroits de Vagrant, il est facile de voir où sont les problèmes de vitesse réels de Magento 2. Si vous lancez Lighthouse dans Chrome, vous verrez que TTFB est tout à fait correct, mais les performances sont divisées par deux si vous réduisez et fusionnez le fichier JS + CSS. En effet, M2 a un mégaoctet de scripts à télécharger. C'est le tueur de performance. Si vous travaillez sur une boîte Vagrant, vous ne le verrez jamais et vous n’aurez pas la rapidité pour le réparer. Par corriger, je veux dire écrire un thème approprié qui n'a pas de sens, tel que le chargement de jQuery sur chaque page.

Pour la production, vous avez besoin de quelque chose qui évolue pour que vous puissiez obtenir les améliorations de vitesse normales, par exemple. Redis, mise en cache des opcodes, Varnish, php-fpm peaufiné, MySQL/MariaDB peaufiné. Si vous développez sur Linux, vous pouvez tester ces choses sur localhost en sachant qu'elles fonctionneront bien en production. Avec cette abomination qui est Vagrant, vous serez confrontés prématurément à ces optimisations car vous espérez et priez pour une machine performante parce que vous avez besoin de travailler. Cependant, ce faisant, et en l’absence de vitesse native, vous ne pourrez rien faire.

Si vous n'avez pas de machine de rechange pour mettre Linux sous tension, rendez-vous au conseil local, prenez un PC, insérez un disque SSD et vous êtes prêt à partir.

4
Henry's Cat

ma recette: 

  • Utilisez * nix comme système d'exploitation principal

  • Utilisez docker avec PHP 7 et Nginx

  • utilisez gulp pour générer des fichiers css et js (plus rapide que grunt)

  • utiliser du redis et du vernis

  • désactiver uniquement les caches nécessaires

Et le conseil le plus précieux - vous avez vraiment besoin de SSD de travailler avec magento2 si vous essayez toujours de développer sur disque dur

p/s Magento 2 plus compliqué que Symfony/Laravel/CI (M2 consiste en Symfony en passant) et ne peut pas être aussi rapide que des frameworks purs 

1
bxN5

En mode "développeur", tous les caches sont désactivés. C'est pourquoi magento devient lent. Je suggère d'activer les caches en exécutant la commande 

./bin/magento cache:enable

Cependant, vous devez nettoyer le cache ./bin/magento cache:clean chaque fois que vous modifiez des fichiers xml ou des configurations.

1
ndlinh

Si vous travaillez en mode développeur, vous devez désactiver la fusion JS/CSS, désactiver xdebug et activer opcache. N'hésitez pas à exécuter ces requêtes MySQL sur votre base de données dev et sur le cache de vidage. Cela augmentera les performances du site en mode développeur.

UPDATE core_config_data SET value = '0' WHERE path = 'dev/css/merge_css_files';
UPDATE core_config_data SET value = '0' WHERE path = 'dev/css/minify_files';
UPDATE core_config_data SET value = '0' WHERE path = 'dev/js/merge_files';
UPDATE core_config_data SET value = '0' WHERE path = 'dev/js/minify_files';
UPDATE core_config_data SET value = '0' WHERE path = 'dev/js/enable_js_bundling';
UPDATE core_config_data SET value = '0' WHERE path = 'dev/static/sign';
0
Igor Sydorenko

J'ai réalisé ce vagabond qui vous permet de personnaliser les options de montage et offre d'excellentes performances:

  • montage nfs ou montage normal
  • répertoire mount /var/www/magento/app ou projet entier /var/www/magento

https://github.com/zepgram/magento2-fast-vm

Vous pouvez travailler sur une installation rapide de magento et adapter les paramètres en fonction de vos habitudes de travail et de votre performance de machine hôte.

Par exemple, si votre ordinateur hôte ne prend pas en charge l’option NFS et présente de mauvaises performances, vous pouvez uniquement monter un répertoire d’application suffisant pour le développement.

0
Benjamin Calef

Essayez de désactiver la synchronisation avec le dossier de synchronisation vagrant par défaut (il suffit de commenter le fichier config.vm.synced_folder dans VagrantFile et de le recharger) - il est trop lent pour pouvoir travailler avec beaucoup de fichiers ...

Toujours en mode développeur, il sera utile de générer des fichiers statiques: bin/magento setup:static-content:deploy et de s’assurer que tous les caches sont activés: bin/magento cache:status 

Si cela ne vous aide pas, vous pouvez essayer l'outil Magento DevBox basé sur Docker: http://devdocs.magento.com/guides/v2.1/install-gde/docker/docker-over.html

0
Michail

Pour environnement de production:

Vous devez utiliser Redis pour les descripteurs Cache, Cache de page complet et Session .__ ( http://devdocs.magento.com/guides/v2.0/config-guide/redis/config-redis.html )

Vous devez utiliser Varnish pour le cache HTTP intégré à Magento ( http://devdocs.magento.com/guides/v2.1/config-guide/varnish/config-varnish.html )

Vous devez configurer le mode de production Magento en production . ( http://devdocs.magento.com/guides/v2.1/config-guide/bootstrap/magento-modes.html )

Vous devez utiliser ElasticSearch pour le moteur de recherche, EE uniquement ( http://devdocs.magento.com/guides/v2.1/config-guide/elasticsearch/es-overview.html )

Vous devez utiliser PHP 7

Vous pouvez utiliser MariaDB même s'il n'est pas supporté par Magento 2.

Vous devez utiliser la minification CSS, la minification JS et le groupement JS (qui fonctionne uniquement en mode de production).

Consultez la documentation officielle de Magento 2 pour configurer cette configuration de production.

0
Franck Garnier

Un peu tard, mais je pense que la réponse lorsque je travaille sur vagrant/docker est principalement que l’entrée/la sortie des fichiers est terriblement lente. 

Ma solution était simplement de désactiver tout le dossier partagé et de le remplacer par un projet distant (connexion sftp) dans PhpStorm. Tous les fichiers sont ainsi stockés dans la machine virtuelle et ne doivent pas être synchronisés à chaque fois que la page nécessite un rechargement. 

Le principal avantage, bien sûr, est qu’il est incroyablement rapide lorsque vous travaillez en mode développeur. 

Mais il existe également quelques problèmes mineurs lors de l'utilisation de cette configuration:

  • Vous ne pouvez pas exécuter de commandes directement à partir de votre terminal. Vous devez ssh dans votre vagrant pour exécuter les commandes magento2 cli. 

  • Après avoir exécuté les mises à jour du compositeur, vous devrez peut-être télécharger à nouveau le dossier entier, car dans PhpStorm, les modifications à distance ne sont pas téléchargées automatiquement. 

0
tobias

Voici ma recette pour développer des thèmes/modules dans localhost pour Magento 2.2 et 2.3:

  • Macbook Pro
  • Valet Plus (Nginx, MySQL 5.7, PHP 7.1 et 7.2 - vous pouvez facilement basculer entre les versions PHP avec valet use 7.1 ou valet use 7.2) https://github.com/weprovide/valet-plus
  • memory_limit défini sur 4G
  • Assurez-vous que Magento est défini sur le mode développeur: php bin/magento deploy:mode:set developer
  • TOUTES LES CACHES ACTIVÉES sauf FPC. Chaque fois que j'ai besoin de tester une modification impliquant des fichiers de configuration, etc., je supprime manuellement le contenu du dossier var/cache ou du dossier generated/code pour les modifications de DI. Le type de cache qui ralentit tout spécialement est le cache de configuration, il doit donc être activé pour que les pages frontend/backend se chargent avec un lent ralentissement.
  • J'utilise Grunt Watch et l'extension Livereload Chrome pour voir mes modifications apportées aux fichiers .less sans avoir à déployer des fichiers statiques à chaque modification. https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/css-topics/css_debug.html
  • Chaque fois que je modifie un fichier JS, je navigue vers pub/static/[adminhtml/frontend]/[thème]/[locale]/et supprime UNIQUEMENT le dossier contenant le fichier statique correspondant au fichier JS dans lequel j'ai changé. Cela m'empêche de avoir à déployer TOUS les fichiers statiques. Magento ne régénérera que les fichiers statiques du dossier supprimé, en épargnant BEAUCOUP de temps (veillez à actualiser votre navigateur à chaque fois que vous supprimez un fichier statique)

La configuration n’est pas encore parfaite, mais c’est le moyen le plus rapide que j’ai trouvé jusqu’à présent d’être productif sans me tirer les cheveux.

0
Daniel Kratohvil