Magento 2 非常慢(开发者模式)

Posted

技术标签:

【中文标题】Magento 2 非常慢(开发者模式)【英文标题】:Magento 2 goes terribly slow (Developer mode) 【发布时间】:2017-02-22 09:46:14 【问题描述】:

最近我开始开发 magento 2 项目。

首先我在 Windows 上使用 xampp 进行了尝试,结果一团糟……每次刷新页面都是一场噩梦,加载页面大约需要 30-40 秒。我读到过,Windows 系统文件在使用 magento 时很慢,因为它的结构很大,而且这篇文章几乎是在强迫你使用 linux 来开发 magento 项目。

问题是我需要 Windows 来安装只能在 Windows 上运行的另一家公司应用程序,我尝试使用 Virtualbox 安装虚拟机,它有所改进......但我正在使用虚拟机这一事实让我很生气...

我目前正在工作的下一个解决方案是使用 vagrant。好的,我感觉这种方式发展得很好,但它一直很慢...... 15-20s......

我在 Vagrant 上的配置是 5120MB(电脑有 8GB)并使用我所有的电脑 4 核。

像这样工作我感觉很糟糕......当我使用 symfony/Laravel/Codeigniter 处理我以前的项目时,就像:

写几行代码,tab到浏览器,F5,即时查看变化。

在 M2 上:编写几行代码,在浏览器中按标签,F5,等等……等等……好吧,现在它刷新了页面,但它没有加载,等等……等等……嗯几乎…… 。 好的。没有变化,但我清理了缓存......哦,我想我也必须删除静态文件。去吧……再等等……

天啊……M2怎么跑得更快?我只问5s之类的……只是看着屏幕一直在等待我感觉很蠢……

对于声明,我只要求开发模式,我 试过 必须在生产模式下安装另一个 magento 项目以更快地测试事物,然后与开发者模式...因为...天哪...只是尝试一次又一次地执行订单工作流程...

嗯,仅此而已...我唯一没有尝试的是在计算机上使用Linux环境...但这与使用vagrant相同...我不明白...您如何开发M2开发商?在特殊的前端开发人员中...我不相信他们的工作方式与我相同...等待 20 秒加载页面 + 清理缓存 + 删除静态文件等。

详细信息:我用 vagrant 尝试了一切,但没有改进,我目前使用的是 Ubuntu 15.04、Apache 2.4、php 5.6(我尝试了 7 但仍然相同)mysql 5.6

这是网络标签: http://i.imgur.com/HG7mbeX.png

【问题讨论】:

config.vm.provider "virtualbox" 做 |v| v.memory = 4000 v.cpus = 2 v.name = "Awesome Box" end 增加内存大小和cpu 我尝试了所有配置,但没有改进...我的电脑有 4 个内核和 8gb 内存,所以我装上了 vagrant 5120mb 和所有 4 个内核。我在工作时检查了内存,似乎一切正常。 我可以确认在开发者模式下工作绝对是在浪费时间。简单地说,它是不可能工作的。我在 Ubuntu 上,我的笔记本电脑不是火箭,但我可以管理 20 个不同的网站,还有 Magento 1 和其他 PHP 框架(如 Yii2),我对这些网站没有任何问题。我正在考虑离开 Magento 2。太慢了,要面对太多愚蠢的事情。删除那个文件夹,刷新那个文件夹,运行 grunt,编译那个,禁用这个缓存...... 我对 MAMP 也有同样的问题。它非常慢,最多需要 20 秒,这实在是不可接受的。 【参考方案1】:

2018 年更新,Magento 2.2.4

Vagrant + Windows + Magento2 = 灾难。 Vagrant + Apple + Magento2 = 灾难。

Ubuntu + Magento2 = 燃气烹饪。

简单的模块,例如一个小部件,花费的时间比预期的 2-3 小时多很多天,如果打开页面需要一分钟,就不可能记住你在做什么,特别是如果你必须清除缓存、编译、升级或其他任何事情这应该不需要任何时间。

这是我在办公室工作时亲身体验过的,其中的选项是 Mac 或 Windows。在花了一整天的时间试图更改模板指令并且未能在 8 小时内进行一次配置更改之后,我想在 linux 机器上试一试,看看我是不是疯了,或者这个 Vagrant 的发明是否像那样有用醉酒的流浪汉在路边的公园里露宿街头。

陈旧的 linux 机器,内存不足,SSD ,库存 Apache,没有花哨的缓存,可以毫无问题地完成任务,我能够毫不费力地在开发模式和生产模式之间切换,并完成了我花了好几天才完成的事情在几分钟内。

工作机器是第 8 代 i7,Vagrant 设置非常像某人的宝贝,并且花费了大量时间来构建这头野兽。然而,构造板块移动得更快。 Vagrant 和虚拟化可能很流行,但它对 M2 开发毫无用处。事实上,我安装了 M2 并为其完成了所有 db 和 vhost 设置,所用时间比构建 Vagrant 盒所需的时间还要短。

至于性能,由于在基本 linux 设置上的 M2 比一些笨拙的 Vagrant 工作快 10 倍,因此很容易看出 Magento 2 的真正速度问题在哪里。如果你在 Chrome 中启动 Lighthouse,你会看到 TTFB 绝对没问题,但如果你缩小和合并 JS + CSS,性能会减半。这是因为 M2 有 1 兆字节的脚本可供下载。这是性能杀手。如果您正在研究 Vagrant 盒子,那么您将永远看不到它,也没有速度修复它。通过修复它,我的意思是编写一个没有废话的正确主题,例如在每个页面上加载 jQuery。

对于生产,您需要一些可以扩展的东西,这样您才能获得正常的速度增强,例如Redis、操作码缓存、Varnish、调整 php-fpm、调整 MySQL/MariaDB。如果你在 Linux 上开发,那么你可以在 localhost 上测试这些东西,因为它们在生产环境中可以正常工作。使用 Vagrant 这种可憎的东西,您将过早地涉足这些优化,因为您希望并为高性能机器祈祷,因为您需要完成工作。但是,这样做,并且由于缺乏本机速度,您将无法完成任何事情。

如果您没有备用机器来安装 linux,那么只需转到本地提示,获取任何 PC,将 SSD 放入其中即可。

【讨论】:

我认为这个答案是基于使用 VirtualBox 共享文件夹的经验,这会导致 i/o 增加。我已经在 Native Linux 和 VirtualBox Ubuntu(没有共享文件夹)之间进行了测试,实际上并没有任何区别。只需确保在 X11 上使用 Linux PhpStorm 并正确清除各个缓存以及 DI 生成的文件。事实上,如果您了解生成了哪些代码,您就可以根据所做的更改知道需要清除的确切文件。【参考方案2】:

这是我在本地主机中为 Magento 2.2 和 2.3 开发主题/模块的秘诀:

MacBook Pro Valet Plus(nginx、MySQL 5.7、PHP7.1 和 7.2 - 您可以使用 valet use 7.1valet use 7.2 在 PHP 版本之间轻松切换)https://github.com/weprovide/valet-plus memory_limit 设置为 4G 确保将 Magento 设置为开发人员模式:php bin/magento deploy:mode:set developer 启用除 FPC 之外的所有缓存。每当我需要测试涉及配置文件等的更改时,我都会手动删除 var/cache 文件夹或 generated/code 文件夹的内容以进行 DI 更改。使一切变慢的缓存类型是配置缓存,因此必须启用它,否则前端/后端页面的加载速度会非常缓慢。 我使用 Grunt Watch 和 Livereload Chrome 扩展程序来查看我对 .less 文件的更改,而无需在每次更改时部署静态文件。 https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/css-topics/css_debug.html 每当我更改 JS 文件时,我都会导航到 pub/static/[adminhtml/frontend]/[theme]/[locale]/ 并仅删除与我更改的 JS 文件对应的静态文件所在的文件夹。这个使我不必部署所有静态文件。 Magento 将只为已删除的文件夹重新生成静态文件,从而节省大量时间(每次删除静态文件时请务必在浏览器中进行硬刷新)

这仍然不是一个完美的设置,但它是迄今为止我发现的最快的方法,可以在不拉扯头发的情况下提高工作效率。

【讨论】:

增加 php 的内存限制对我有用。谢谢!【参考方案3】:

如果你在开发者模式下工作,你需要禁用 JS/CSS 合并,禁用 xdebug 并启用 opcache。随意在您的开发数据库上运行这些 MySQL 查询并刷新缓存。这将在开发人员模式下提高网站性能。

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';

【讨论】:

【参考方案4】:

尝试禁用与默认 vagrant 同步文件夹的同步(只需在 VagrantFile 中注释 config.vm.synced_folder 并重新加载) - 当需要处理大量文件时会变慢...

在开发者模式下也将有助于生成静态文件: bin/magento setup:static-content:deploy 并确保启用所有缓存:bin/magento cache:status

如果没有帮助,您可以尝试基于 Docker 的 Magento DevBox 工具:http://devdocs.magento.com/guides/v2.1/install-gde/docker/docker-over.html

【讨论】:

【参考方案5】:

我尝试了所有方法,唯一有效的是提供 bitnami 的虚拟机。 https://bitnami.com/stack/magento/virtual-machine

说真的,我不知道这个虚拟机有什么,但运行速度非常快。我尝试使用全新安装的 Ubuntu、CentOS 等创建我的虚拟机。但不像这个虚拟机那样工作得很好。

【讨论】:

感谢您的帖子!除了在 Docker 映像中还有类似的东西吗?【参考方案6】:

在“开发者”模式下,所有缓存都被禁用。这就是为什么 magento 变慢的原因。 我建议通过执行命令来启用缓存

./bin/magento cache:enable

但是,每次修改xml文件或配置时,都需要清理缓存./bin/magento cache:clean

【讨论】:

【参考方案7】:

我的食谱:

使用 *nix 作为您的主要操作系统

在 PHP 7 和 Nginx 中使用 docker

使用 gulp 生成 css 和 js(比 grunt 更快)

使用 redis 和 varnish

只禁用需要的缓存

还有最有价值的建议 - 如果您仍在尝试在 HDD 上进行开发,您真的需要 SSD 来使用 magento2

p/s Magento 2 比 Symfony/Laravel/CI 更复杂(M2 包括 Symfony 顺便说一下),也不能像纯框架那么快

【讨论】:

【参考方案8】:

对于生产环境:

必须使用 Redis 来处理 Cache、Full Page Cache 和 Session (http://devdocs.magento.com/guides/v2.0/config-guide/redis/config-redis.html)

您必须将 Varnish 用于 Magento 内置的 HTTP 缓存 (http://devdocs.magento.com/guides/v2.1/config-guide/varnish/config-varnish.html)

您需要设置生产 Magento 模式。 (http://devdocs.magento.com/guides/v2.1/config-guide/bootstrap/magento-modes.html)

搜索引擎必须使用 ElasticSearch,仅限 EE (http://devdocs.magento.com/guides/v2.1/config-guide/elasticsearch/es-overview.html)

您必须使用 PHP 7

即使 Magento 2 不支持,您也可以使用 MariaDB。

您必须使用 CSS 缩小和 JS 缩小以及 JS 捆绑(仅适用于生产模式)。

查看 Magento 2 官方文档以设置此生产配置。

【讨论】:

是的,我知道,在生产模式下运行速度如此之快(如果不是这样,那将是一场灾难)。但问题是当你需要开发时......进行扩展等......你需要在开发者模式下工作......这是一场噩梦,我编辑了这个问题以便更好地理解...... 阅读我的评论,这不仅仅是关于生产模式。还有关于 Redis、Varnish、Minification。如果你使用 Redis,你会避免很多 I/O 调用。还要检查您的计算机性能。我的笔记本电脑没有性能问题。你有足够的内存、CPU 吗? 我会尝试这个...但我一直认为这不是解决方案...所有这些人员都与缓存相关,I/O 用于生产,当我开发时我想要这个项目每次都创建所有资源以查看更改,现在,每次我必须清理缓存,删除静态文件等......所以如果我设置所有这些员工,也许我会更困惑试图思考发生了什么,为什么我的代码什么都不做…… 我在 Frédéric Henri 的另一篇文章中阅读了您的 cmets。我目前正在使用带有 Ubuntu 16.04 的 Virtual Box 的 Magento 2。我没有任何速度问题。它并不快,但不到5秒。使用 iotop 检查您的 IO 使用情况。检查您的 CPU 使用率。检查您的内存使用情况。尽量不要将所有 CPU 内核用于 VM。在另一台计算机上尝试。【参考方案9】:

这里有点晚了,但我认为在 vagrant / docker 上工作的答案主要是文件的 I/O 非常慢。

我的解决方案只是禁用整个共享文件夹并将其替换为 PhpStorm 中的远程项目(sftp 连接)。所有文件都存储在虚拟机中,无需在每次页面需要重新加载时进行同步。

当然,主要的好处是,它在开发者模式下工作时速度惊人。

但在使用此设置时也存在一些小问题:

您不能直接从终端运行命令。您必须 ssh 进入您的 vagrant 才能运行 magento2 cli 命令。

运行作曲家更新后,您可能需要再次下载整个文件夹,因为在 PhpStorm 中不会自动下载远程更改。

【讨论】:

【参考方案10】:

我制作了这个 vagrant,它允许您自定义挂载选项并具有出色的性能:

nfs 挂载或常规挂载 目录挂载/var/www/magento/app或整个项目/var/www/magento

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

您可以进行快速的 magento 安装并根据您的工作实践和主机性能调整参数。

例如,如果您的主机不支持 NFS 选项并且性能不佳,您可以只挂载足以用于开发的应用目录。

【讨论】:

【参考方案11】:

@Henry 的猫是对的。非 linux 操作系统 + Magento2 = 灾难。 如果您不努力使用 xmls,您可以打开 magento 缓存 bin/magento cache:enable 并在修改这些文件中的内容时使用bin/magento cache:clean 或者更好的是禁用某些缓存类型 bin/magento cache:disable db_ddl full_page 。 @Igor Sydorenko 是绝对正确的,禁用 css js 合并/缩小将提高很多开发人员模式的性能。

【讨论】:

【参考方案12】:

为了给开发者灵活性,Magento 会生成很多文件。如果它在生产模式下运行,最慢的部分是可以优化的磁盘读取。 但是在开发者模式下运行 Magento 2 时,磁盘读写操作会使其速度过慢。

我在开发 Magento 2 应用程序时也遇到了同样的情况。我的第一个建议是迁移到 SSD。但是,不可能每次都适用于每个人。 我也无法在具有大量 RAM 和 CPU 能力的高端笔记本电脑上安装 SSD。

我找到了一个解决方法,它使我在 localhost 中使用 Redis 缓存的开发速度相当快。缓存清理和预热变得非常快,这大大减少了我等待更改的时间。 Here is the full article to use Redis cache in localhost with Magento 2.

【讨论】:

【参考方案13】:

好的,我已经使用 Magento 2.2.7 大约 6-8 个月了。所以有一些注意事项你应该考虑:1.使用SSD硬盘(如果可能的话)2. strong> 在 magento 中配置 grunt。它肯定有助于快速在 magento 中进行前端开发。因为 grunt 有助于编译更少的文件而不需要执行 s:s:d 命令。grunt with magento

3. 请勿启用 xdebug。4. 仅当您连续多次重新加载页面时才禁用缓存。

【讨论】:

【参考方案14】:

我尝试了许多机器和许多配置,例如:

Windows 10 - vagrant machine debian Windows 10 - vagrant machine debian - docker Windows 10 - 流浪机器 ubuntu - docker Windows 10 - 流浪机器 ubuntu

bitnami机器问题:Xdebug配置不太好

根据我的经验,对于那些想在 Windows 上工作的人来说,最好的机器是一台流浪机器: https://app.vagrantup.com/certiprosolutions

所以在你的 Vagrant 文件上使用这个配置:

  config.vm.box = "certiprosolutions/ubuntu-lnmp"
  config.vm.box_check_update = false

  # box modifications, including memory limits and box name. 
  config.vm.provider "virtualbox" do |vb|
     vb.name = "Magento 2.3.3 ubuntu ngnix"
     vb.memory = 8240
     vb.cpus = 2
     #vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
  end

优点:

    可以在PHP的多种配置之间切换 (5.6,7.0,7.1,7.2,7.3) 在同一环境中处理多个版本的 Magento

一点注意事项。要使 xdebug 工作,您应该将 xdebug 的配置更改为:

[XDEBUG]
zend_extension=xdebug.so
xdebug.default_enable = 1
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_autostart = true
xdebug.remote_handler = dbgp
xdebug.remote_port = 9001
xdebug.remote_host=127.0.0.1
xdebug.remote_log="/tmp/xdebug72.log"
;xdebug.max_nesting_level = 1000

【讨论】:

以上是关于Magento 2 非常慢(开发者模式)的主要内容,如果未能解决你的问题,请参考以下文章

在 Next.js (30s+) 的开发模式下加载页面非常慢,这可能是啥原因造成的?

idea在debug模式启动非常慢,日志正常debug模式一直在启动中状态

Magento 和 PayPal Pro - 沙盒模式 - 无卡验证码

IDEA 在debug模式下启动慢或者无法启动解决

BrowserSync 非常慢

magento2.2如何操作数据表