为什么Magento这么慢?[关闭]


138

Magento通常这么慢吗?

这是我的第一次使用体验,管理面板只需花一些时间即可加载和保存更改。这是带有测试数据的默认安装。

托管该服务器的服务器可超快地服务于其他非Magento站点。Magento使它如此缓慢的PHP代码有什么用,该如何解决?


12
您在什么硬件上运行它?根据我的经验,Magento需要一些认真的硬件支持。
抖动

3
我不是在寻求支持,而是在寻求代码。我的希望是,有人过去曾经经历过这种情况,并且已经优化了代码,以避免出现这种迟钝的行为。我没有要指出的特定代码段,因为它适用于整个站点。我将不得不进一步调查此事。
欧元先生

18
Magento具有6000多个类文件,并且是为公司使用而非家庭使用而构建的。如果没有APC,请不要考虑安装它。我不建议小商店使用它。
Elzo Valugi 2010年

1
关于您的标志,@ Jonesome:这个问题非常广泛,...在这一点上可能有些过时了。就是说,我们现在确实有一个专门解决Magento问题的站点(Magento),对于任何致力于优化其设置的人来说,这可能都是一个很好的资源。
Shog9 2013年

1
@ Shog9我管理着一个开发并支持magento附加组件的团队。我可以告诉您,这个确切的问题几乎每天都会出现。Magento不是一个“普通”的灯应用程序,因为它非常(非常)资源密集型。这个线程很重要。关闭它会迫使这种普通对话脱离SO,这对所有人来说都是不幸的。
Jonesome恢复莫妮卡

Answers:


183

我只是切身参与优化Magento以获得性能,但是这是系统如此缓慢的一些原因

  1. Magento的某些部分使用在MySQL之上实现的EAV数据库系统。这意味着查询单个“事物”通常意味着查询多个行

  2. 幕后有很多事情(应用程序配置,系统配置,布局配置等),涉及在内存中建立巨型XML树,然后“查询”这些树以获取信息。这需要占用内存(存储树)和CPU(解析树)。其中一些(尤其是布局树)很大。而且,除非启用了缓存,否则这些树都是根据磁盘上的文件每个请求来构建的。

  3. Magento使用其配置系统允许您覆盖类。这是一个强大的功能,但是它意味着在实例化模型,帮助程序或控制器时,都需要运行额外的PHP指令来确定是否需要原始类文件或替代类文件。这加起来。

  4. 除了布局系统,Magento的模板系统还涉及许多递归渲染。这加起来。

通常,Magento工程师首先要负责构建尽可能最灵活,可定制的系统,然后再担心性能。

要确保获得更好的性能,您要做的第一件事就是打开缓存(系统->缓存管理)。这将缓解Magento构建各种XML树时发生的某些CPU /磁盘阻塞。

您要做的第二件事是确保您的主机和运营团队具有调整Magento的性能。如果您依靠每月7美元的计划来顺利度过难关,那么,


10
感谢您的广泛解释。Magento在允许灵活性的同时确实非常强大。我最初以为是由于一些错误编写的SQL导致DB写停顿了,但是我现在确实意识到,最初期望的幕后还有很多事情要做。注意:由于商店所有者添加了产品,因此禁用了缓存。启用缓存时,他抱怨产品没有出现,这迫使我在建立商店时禁用了缓存。它被托管在专用服务器上,但似乎我将不得不将Magento移至其自己的专用盒中。
欧元先生

4
我前一段时间使用XHProf对其进行了概要分析。XML解析花费了很多时间-我认为您在此列表中很有名。
Morgan Tocker

1
我想知道是否在HHVM上运行Magento会使它变得更好。最后,我检查了HHVM不支持Magento,但是如果完成了,那会有所帮助吗?
Bharadwaj Srigiriraju 2015年

1
这解释了很多。知道是成功的一半。我不认为这不能被认为是建设性的。
flcoder

如果您使用composer,请不要忘记优化composer的自动加载器文件(请参阅magento性能指南),并且-对于Magento2-开启生产模式!如果您的应用程序不存在全页缓存问题,那么Varnish也是一个很好的主意。
Dmitri Sologoubenko

54

除了Alan Storm关于缓存的建议之外,我特别建议您研究与缓存有关的两件事:

-确保缓存在memcached中,而不是磁盘中。

我照顾了几次magento安装,一旦您在系统上获得了任何负载,memcached的执行速度就会大大提高。而且它的死角很容易改变(至少相对于其他magento东西!)

良好的起点在这里:http : //www.magentocommerce.com/boards/viewthread/12998/P30/-但是,如果您以前从未使用过memcached,那么也值得一看有关它的一些常规信息。

-启用模板/视图缓存。

这是一篇很好的文章:http : //inchoo.net/ecommerce/magento/magento-block-caching/

magento网站上也有不错的网站(谷歌magento块缓存),但此刻它还不完善。

要将我的两美分添加到块缓存中,建议您在/ app / code / local中创建自己的块,扩展核心块并定义缓存参数,将其命名为xxx_Cac​​he,然后更新布局以使用这些块的核心。这样,您可以避免在升级magento时丢失所做的更改或破坏系统。


3
谢谢。我将看一下之前从未在生产中使用过的memcached。克隆块的好主意。
—欧元先生

3
我赞成Bennubebey所说的,我在运行Windows Server时不使用memcached,但是我将/ var目录存储在固态驱动器中,这对我产生了很大的影响。
Rick J

@rickj-是的,任何使./var文件夹更快的方法绝对有帮助,我也尝试过在memcached之前使用tmpfs,并且也得到了不错的提升。
benlumley

我将添加仅对单个节点使用apc缓存,因为它似乎比针对多节点环境的内存缓存要少。
sbditto85

2
是的,没错。但是这里有一些警告,取决于您运行PHP的方式,您可以为每个PHP进程分配一个单独的APC缓存-如果您循环每个X请求的PHP进程,它的最佳性能将变得更低。
benlumley 2012年

23

如果您还没有看到它,Magento和Rackspace联手创建了有关性能调整Magento的白皮书。太好了 https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

-编辑-

另一项新的重要资源(2011年10月)是:http : //www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(感谢Alan Storm对此。)


感谢您的更新,我将在以后深入阅读。
欧元先生

2
第二个链接现在已消失。
Laizer 2014年

1
第一个链接也死了。
爱德华

链接断开。Ner
Ner

1
Rackspace白皮书的直接链接(链接1)。
Levi Figueira '18

17

您的管理界面运行缓慢的原因可能也很不明显。Magento有一个名为Mage_AdminNotification的模块。尝试禁用该分机。因为它的作用是查询magentocommerce.com以获取新的更新消息。如果它们的服务器运行缓慢,则由于网络延迟和外部新闻的加载,您的管理页面将等待并且实际上运行缓慢。如果您已通过防火墙保护了传出服务器的连接,这可能会更加令人沮丧,因为管理界面将在无法访问magentocommerce.com时等待超时。

要禁用它:转到系统->配置,滚动到底部,然后单击高级(在“高级”部分)。现在禁用Mage_AdminNotification并保存!


4
这对我本地开发环境的性能产生了重大影响,这始终使我感到沮丧,因为它在非常快速的开发环境中运行的速度如此之慢。谢谢!
random_user_name 2013年

在Magento2中:存储->配置->高级->高级,然后禁用Mage_AdminNotification
Scott C Wilson

6

我对Magento仅有肤浅的经验。我将其安装在共享的网格服务器上,页面加载令人沮丧,大约需要5秒钟以上。令人费解的是,我将其安装在针对CMS站点进行了优化的专用服务器上,它感觉非常非常活泼。

我的专用主机有〜10个Joomla!网站和正在运行的VBullitin网站。

我的猜测是共享托管不会表现出色。超额预订只会使Magento不能运行足够的资源。


6

我更多地参与了公司的托管服务器优化,但是我可能会为您提供一些技巧。首先,您可以使用Zend服务器的代码跟踪功能更仔细地查看代码。它将使您看到脏物何时何地变脏。

我完全同意benlumley关于缓存的考虑。我们托管的大多数站点甚至都没有启用块缓存。必须明确调用此缓存,而不要“假定”该缓存。因此,如果您的代码尚未参与此机制,则肯定要尝试这种方法。如果您使用的是EE版本,则可以获取完整页面,以充分利用野兽的力量。

反向代理也将有很大帮助。它将缓存静态资源,从而大大降低了前端服务器的php解释堆栈的压力。

不要忘记将会话和Magento缓存写入RAM磁盘。这无疑也将带您进入另一个层次的表演。

这里还有很多话要说,但我已经没时间了。您必须知道,一个良好的站点,在1.4.1 CE版本中进行了良好的编码,在2x5650 Xeon + 16 GB RAM服务器上运行,并且顶部装有Rproxy,每天最多可以吸引5万名唯一身份访问者,并且每个页面都平滑。


5

从Apache切换到LiteSpeed对我们有很大帮助。除了:编辑MySQL的设置,安装Fooman Speedster(用于压缩/合并js和css文件的模块),以及安装APC。Magento还发布了有关如何从企业版中获得最佳性能的白皮书,但它同样适用于其他版本:http : //www.magentocommerce.com/whitepaper/


4

您的Magento购物车运行缓慢可能有很多原因,但没有任何借口,因为有多种方法可以缓解该问题并使它变得非常快。通过修改htaccess文件来启用Gzip是一个开始。您还可以安装fooman speedster扩展。使用的服务器类型也将决定商店的速度。更多提示和更好的解释在这里http://www.interactone.com/how-to-speed-up-magento/


4

首次安装时,我的页面加载需要30秒。我的服务器没有在ram或处理器中耗尽,所以我不知道该怎么办。看一下firebug的网络面板,每页可加载约100个文件,并且每个文件都花费很长时间进行连接。在安装fooman speedster和htaccess中的gzip后,加载时间减少到3秒,就像它们在我服务器上的其他购物车上一样。


3

Magento非常慢,因为数据库设计不是很好。该代码很混乱,很难更新和优化。因此,所有优化都是通过缓存而不是代码完成的。

另一方面。这是一个拥有许多工具的网上商店。因此,如果您需要一个灵活的网上商店,只需购买一台功能非常强大的服务器即可。


1
数据库设计实际上是非常好的和灵活的。
黑色

3

它也将归结为功能与性能。

使用nginx,php-fpm,memcached,apc和适当设计的服务器可获得原始性能。

在设计magento绩效云时,可以通过考虑整个基础架构来管理plesk和magento绩效之类的功能。

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.