Magento2在本地主机开发上运行如此缓慢


25

我最近开始开发magento2新的扩展或自定义项,我的第一印象是一场噩梦。我所做的每项更改都必须等待20到30秒?真?

我说的是开发模式,我知道在启用缓存的生产环境中,网站可以保持顺畅。但是,当我处理扩展名或布局问题时,我需要删除静态文件,清除缓存等。

我的问题是,你们所有M2开发人员如何工作?因为我认为您不必等待20到30秒钟来刷新页面...

我的环境:我的电脑是具有8GB RAM的“好” i5。我需要使用Windows,所以我要使用vagrant:

  • 使用所有4核CPU
  • 使用5120MB的RAM
  • Ubuntu / trusty64-Ubuntu 14.04
  • PHP版本7.0.12-1 + deb.sury.org〜trusty + 1
  • MariaDB-10.1.18-MariaDB-1〜可信任
  • Magento 2.1.2仅与sampledata一起安装(没有安装更多模块)
  • (问我是否想知道更多)

到底发生了什么事? 通常,M2响应正常,缓慢但可以,大约5到10s来加载页面,但是有时(比通常更频繁)它永远卡住了!有时是第一页,有时是css,js,html文件,但问题始终出在TTFB上。

我也看到了设置向导的问题...与angular.js这些文件永远存在...

这2张图片是关于在设置向导中导航的。

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

然后另一个浏览前端目录: http://imgur.com/oXYC52D

我到底在问什么? 这正常吗?你们在这个时间工作吗?我和一些同事评论了这一点,我们只是不相信,我必须像这样工作吗?有时候,我总是无所适从地等待着观看屏幕...

如果有人要我向他展示测试,例如创建新产品或类似的东西,他只是吓跑了...创建新订单,填写字段,每个字段都执行一个持续5-6s的js ...

我不知道,但是用这些东西开发我感到很不好...


尚未有机会使用magento 2:但是id认为大多数性能问题都来自您无所事事的环境。您是否将virtualbox与无业游民一起使用?将多个内核与virtualbox一起使用会降低性能。您是否从流浪者>的共享文件夹中运行magento> magento将文件写回到存在性能问题的同一共享上。
OlliTyynelä16年

另外,如果给流浪者5gig,您的系统上的内存可能也会用完,这导致主机上使用swap。仅在实际需要时才增加金额。
OlliTyynelä16年

问题的很大一部分是您在Windows上。我在Windows上使用多年,使用vagrant / magento的速度非常慢。这是由于文件同步模式,与nfs不兼容。我开始双重引导到Ubuntu桌面,并且我的magento站点非常快,然后过了一会儿,我有了使用NFS的Mac,而且速度也很快。
肖恩·艾布拉姆森

是的,它与virtualbox一样无所事事。为什么使用更多的内核必须降低性能?我认为将所有资源提供给VM可能会使“我的电脑”运行缓慢,但使我的VM运行得更快...并且我使用的文件夹是/ var / www(我尝试不使用共享文件夹,它只是运行中的“ linux”现在)。我如何查看失败的原因?我可以执行top或类似的命令...。但是不知道如何解释...
slayerbleast

@ShawnAbramson是的...我们建议安装双引导程序只是为了尝试它,因为正如我说的那样,我们不相信M2开发人员的工作就像我目前正在做的那样……
slayerbleast

Answers:


8

我尝试了一切,唯一起作用的是提供bitnami的虚拟机。https://bitnami.com/stack/magento/virtual-machine

说真的,我不知道这个虚拟机有什么,但是运行的很快。我尝试使用全新安装的Ubuntu,CentOS等创建虚拟机。但是,没有比该虚拟机更好的工作了。


我认为此VM的规格的主要区别是内存缓存?在我的Windows上(至少无法在PHP 7上运行)
MackieeE

6

禁用CSS / JS合并和缩小:

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

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

另请参阅本指南,了解如何提高Magento 2的性能。


1
默认设置已经具有这些值。这并不会影响太大……
slayerbleast

那么合并对在线服务器有用吗?处理和不下载的更多开销?
Mohammed Joraid '18

您为什么要禁用CSS / JS合并和缩小,从字面上看,它是提高速度的一种选择,在我看来,这就像枪杀自己
John John

4

我发现开发人员模式禁用所有功能-这太过分了。我确实希望缓存某些方面,例如翻译。幸运的是,env.php您仍然可以设置要专门使用的缓存:

'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,
      ),

这是我在Checkout上进行开发时选择缓存的上面的内容,因为它是大量前端。我选择不缓存布局;块和整页以查看我的更改。


太感谢了!我遇到了这个问题,因为我将Magento2升级到了新版本并进行了全新安装。显然,它覆盖了我的env.php,这使它变得越来越慢。对env.php的此更正修复了该问题。再次感谢!
codiga

4

回答这个问题后,Magento的建议发布了。阅读其他答案,我认为此信息可能对您有所帮助

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

最佳配置

以下是您可以在本地开发计算机上进行的优化的列表

  • Magento建议安装和使用最新支持的PHP 7版本以提高性能。
  • 用Percona替换MySQL数据库。
  • 确保安装并启用PHP OPcache。
  • Xdebug默认是关闭的。仅在需要时才启用此功能,因为它需要大量内存并降低性能。对于Magento,xdebug.max_nesting_level配置需要设置为200或更高。您可以增加PHP可用的内存,从而在启用Xdebug的情况下提高性能。
  • 如果需要样本数据,则可以使用composer或通过克隆存储库进行安装。
  • 为了加快前端开发,请关闭CSS和JavaScript的合并。
  • 确保已打开缓存(这是默认行为)。通常,仅页面高速缓存和块高速缓存应在开发时关闭,然后在测试时重新打开。
  • Opcache时间戳验证应始终处于开发状态。启用opcache和禁用重新验证无法进行开发,因为任何PHP修改都需要重置缓存。

对我来说,Opcache做到了。现在,它的加载速度非常快。
阿米特·辛格

我遇到的另一件事是,默认情况下可以启用Xdebug,这也会带来性能上的损失。检查/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini更改后,我认为您需要重新启动容器docker restart {web-container-name}
伊恩在Xantek,

1

打开缓存。

转到<your magento 2 directory>/bin并运行此命令magento cache:enable

当编辑前端时,请清理缓存以查看所做的编辑。

转到<your magento 2 directory>/bin并运行此命令magento cache:clean

我的参考

我也是magento 2的新手。我希望即使禁用了缓存,也可以有人使magento 2快速。


1
不知道这是否是可行的解决方案...到处都说要禁用开发模式下的缓存...
slayerbleast

6
当然,如果启用缓存,站点将运行得更快...但是每次更改都必须清理缓存...我认为仍然浪费时间...
slayerbleast

1

我在Ubuntu 16.10上的安装程序,用于进行LESS编辑的前端开发:

  1. 设置开发者模式:

    php bin/magento deploy:mode:set developer

  2. 启用所有缓存:

    php bin / magento c:启用

  3. 前端开发工作流设置为服务器端编译

  4. 在更少的文件中进行任何更改后,运行

    咕clean干净

(上次我要开始学习-带有实时浏览功能的出色观看功能)


0

只是想分享我的个人经验,我想出的解决方案是将Xampp与php版本7.0安装在一起,因为Magento不能与Php的更高版本完全兼容。我尝试了答案中列出的Bitnami Image,但由于我期望Xampp 7.0.23而无法正常工作 下载链接


真?用xampp工作正常吗?我尝试了很多次,这太糟糕了... Magento是什么版本?也许他们这次已经修复了一些性能。我会再尝试。以及为什么Bitnami映像无法按预期工作?
slayerbleast

我在上面添加了Magento 2.1和Xampp 7.0链接,将Bitnami图像与Xampp 7.0进行了比较,我发现xampp简单,快捷
user3127648

0

memory_limit在php.ini文件中增加PHP 将会带来很大的不同。但是,它不会使它非常平滑(尽管可以节省时间)。

默认值为512M。在我的本地计算机上,我将此设置为“ -1”(无限制),这样可以缩短加载时间。

推荐值是此处提到的memory_limit = 2G 。

Magento很重,需要像SSD这样的高性能硬件才能流畅:(


memory_limit与性能无关。从指令名称可以明显看出。
Danila Vershinin

@DanielV。我也对此感到疑惑,但后来发现了这一点:devdocs.magento.com/guides/v2.2/install-gde/prereq/…上面说2G为推荐值
Binod-GoFundMonica

1
同样,出于自身原因,建议这样做。绝对与性能无关。只有在某些PHP脚本(或本例中为Magento模块)最终吞噬了所有服务器RAM的情况下,内存限制才不会完全停止系统。将该值设置得太低或太高绝对不会对性能产生影响。这只是预防性指令,可以使系统更加安全。我感到惊讶的是,人们盲目地认为为其提供更多的内存意味着可以通过该指令实现性能。不是,永远也不会。
Danila

有趣的一点,丹尼尔。我确实盲目地假设了这一点。我们如何证明这一点?有什么可以指导我的指针,以便我可以体会到吗?
Binod-GoFundMonica

设置得太低(例如16MB肯定不足以容纳M2),PHP将失败并出现致命错误。尽可能多地安装模块并将其设置得太高(例如4GB),然后一切正常,直到您再获得很少的站点访问者,这肯定会导致服务器达到“内存不足”状态。如果您只是阅读该指令的文档,则无需进行这些实验。PHP一直在内存中运行。它不会交换到磁盘或执行类似的有趣操作。
Danila Vershinin

0

如果您在Vagrant盒子上设置时遇到问题,几乎可以肯定是共享文件夹的方式。它们应该通过NFS共享。

弄乱了很多不同的盒子之后,我意识到尽管我在配置中设置了NFS,但实际上并不能正常工作,标准的VirtualBox共享系统正在接管。

回到基础知识,设置一个简单的LEMP框并安装此插件:

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

确认NFS正常运行,一切都很好。


0

可以使您的Magento 2在本地服务器上或通常在任何服务器环境中快速设置的事情。

  1. 缩小JS和CSS
  2. 使用诸如Redis或Memcached之类的缓存应用程序。
  3. 启用Magento 2提供的所有缓存,例如block_html,layout,page_cache等。
  4. 合并CSS和JS
  5. 启用平板产品和类别。

现在,在开发环境上时,仅刷新所需的缓存,而不刷新整个缓存,以防止整个缓存重建。


0

magento2在开发人员模式下运行缓慢的主要原因与动态生成的数千个静态和编译文件有关。

为此,有3种解决方案:

  • 使用NFS挂载整个目录(仍然必须使用SSD)。

  • 仅安装应用程序目录(无论您的硬件如何运行都可以),但是您无法访问主机上的/ vendor目录。

  • 使用rsync挂载整个项目,并排除生成文件的目录(发布/静态,生成/代码等...)。

我做了这项工作,尝试一下:https : //github.com/zepgram/magento2-fast-vm/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.