是重量级插件还是大量插件导致网站运行速度变慢?

时间:2010-08-19 作者:allclaws

我经常听说有很多插件会减慢WordPress网站的速度。这当然有道理,因为执行的代码越多,所需时间就越长。

我想知道慢度是否主要是:

仅仅是插件数量的结果?(因为WP必须进行一些处理才能定位和加载每个插件)

是因为有几个慢/重的插件?

更实际地说,当我自己写的时候,是否应该将功能合并到更少的文件中以提高速度?或者让10-20个插件分别完成一项快速任务,这样可以吗?

5 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

概括性经验法则“大量插件会减慢网站的速度”是一个非常直截了当的工具,并且被那些不了解插件如何工作的人所延续,因此他们选择了一些容易妖魔化的东西。

是的,插件可以减慢你的网站速度,但它与数量无关,与质量无关,也与他们想要完成的任务无关。我可以写一个插件,让一个网站屈服(如果我有理由这么做的话),这将比50个其他写得好的插件更糟糕。当然,人们一直在写插件,这会让网站崩溃,因为他们不知道还有什么更好的。

我想“大量插件会减慢网站的速度”的唯一真相是,当你有大量插件时,你很可能会遇到一个坏插件。

细节,让我们来谈谈更多细节。插件使用“钩子”(hooks),这些钩子是沿着执行路径运行特定点的PHP代码位,它们可以做一些事情或过滤值,或者两者兼而有之。WordPress在编写网页和生成HTML以发送到浏览器的过程中很早就开始调用钩子,并继续调用钩子,直到完成对给定页面的运行。

根据插件使用的挂钩,它可能只在特定页面上调用,在“后台”,甚至几乎从不调用。一些挂钩只在管理控制台中工作。一些挂钩只在管理控制台的某些页面中起作用。有些钩子被称为internal psuedo-cron system. OTOH,一些插件可以加载额外的CSS或JS文件,这些文件中的每一个都会降低性能,因为Web Performance Rule #1.

如果您想了解每个页面上调用的挂钩,请考虑使用“Instrument Hooks for WordPress“我为这个问题写的插件”Where Can I Find a List of WordPress Hooks?“以下是插件使用时在页脚中显示的屏幕截图:

Screenshot of Instrument Hooks for WordPress Plugin in action

但是仅仅知道挂钩并不能帮助您确定插件是否有问题。您可以调用一个插件100次,调用它与另一个钩子调用相比微不足道,钩子调用会在SQL查询中添加WHERE子句,这可能会使一个拥有数百篇以上帖子的站点陷入困境。或者它可以对另一台服务器进行HTTP调用。或者它可以刷新每个页面加载的重写规则。罪恶的清单还在继续。

唯一真正知道它的方法是通过查看源代码或更好地通过调试器运行它来审计插件的挂钩,如PhpStorm+XDEBUG.

您自己的插件不必担心代码是如何组织的,以提高性能;担心你的代码会做什么。Optimizing a frequently run SQL query 利用购买Transient API (见:Presentation about the Transient API) 可能是far better for performance 而不是将10个插件的代码合并成一个插件。

另一方面,请考虑出于其他原因组织代码。我想a long list of plugins can create psychological distress 针对大量用户;他们看到这样的屏幕,不知所措,只想简化事情:

Long List of Plugins
(来源:mikeschinkel.com)

然而另一方面,有时用户会因为一个插件做得太多而不知所措。例如,我对GD Star Rating Plugin. 在一个项目上试用了它(更糟糕的是,我想把它挂起来,让它做我需要的事情)之后,我决定把它扔到它的耳朵上。

所以有些人(像我一样)通常会喜欢很多小的紧凑型插件,每个插件都能做一件事,而且做得很好(如果WordPress支持一种分组功能,那就太好了,比如iPhone iOS 4 lets you group apps in folders.)

Long List of GD Star Rating Options
(来源:mikeschinkel.com)

不管怎样,希望这有帮助。

SO网友:hakre

当然,插件只是性能故事的一部分,所以你不能用最终文件的数量来衡量它。还有很多,你不能提前说什么是有效的,所以一些可能在你的电脑上很好的东西不在其他电脑上。

您应该定义其他和自己的标准来做出决策,而不是寻找性能。例如,对于插件,您可以将单独的功能放在单独的插件中,以避免混淆。就速度或内存使用而言,这可能永远不会是性能方面的明智之举,但交易是保持事情的轻耦合,以便更容易开发和使用插件。别忘了,当WordPress的新版本发布时,十个插件中可能只有两个插件,而不是一个大插件。最后,一个用户只需要十个插件中的三个,所以他需要的内存更少。

如果用户抱怨其博客的性能,您通常可以建议他们购买更大的服务器,性能问题就会得到解决。

(早熟)优化是万恶之源。只是在编写插件时不要再考虑性能。轻装上阵:WordPress最终并不是按照性能来设计的,不要犯错误,试着为它编写性能良好的插件;)

WordPress的设计Big Ball of Mud-(anti-)design-pattern. 插件系统是一个与之配合良好的系统。只是不要认为你能像插件作者那样优化。你不能。不要反抗:)

SO网友:bueltge

当插件的设计很好时,您可以将WordPress与数百个插件一起使用——大多数插件的代码都不好,这就是WordPress的性能问题。

SO网友:rfair404

这一切都是关于拥有正确的插件。例如,检查插件是否将自己的表写入数据库,这通常会降低速度。任何加载了大量jquery或javascript的东西通常也会使其速度减慢一点。大量插件并不总是意味着性能下降。确保您使用的缓存插件也会有所帮助。

我想你问这个是因为你正在经历减速?询问您的主机是否可以做些什么来加速它,并确保您的php配置设置正确。

SO网友:Privateer

我会说答案是both.


More plugins = more slowness

您启用的每个插件都会在页面中添加样式表和/或javascript文件,这会大大降低您的网站速度。

如果每个插件都需要一个样式表和javascript文件来在网站前端执行某些操作,那么即使编写得最好的插件也会使网站陷入困境。

合并文件

如果您运行wordpress网站,您有义务学习如何:

正确地将javascript文件合并在一起,正确地将样式表文件合并在一起,将javascript调用从页眉移动到页脚,如果您运行的是wordpress站点,但无法执行上述操作,则不应该运行wordpress站点。。。或者,当你加载更多插件时,你的网站速度变慢了,至少你不应该抱怨。

此外,任何运行wordpress网站的人都应该知道如何:

缩小CSS和javascript文件打开服务器压缩确保为expires头提供脚本和样式表

Poorly written plugins = more slowness

插件作者真正减慢网站速度的主要方法如下:

为单个页面加载多个脚本或样式表-请参见上文使用数据库不当-编写不当的查询、查询修改等可能会对网站造成严重影响。如果无法尽可能地缓存结果,也会导致速度变慢。大多数人都不擅长数据库开发和管理。当这些人使用数据库时,问题随之而来


Tasks that are innately slow

有些东西写得再好也慢不了:

使用第三方服务-任何时候你对用户的响应依赖于某个第三方的响应,你的网站都会变得慢得多

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?