我在我的主机上安装了Wordpress,它非常慢。(3s页生成)。然后我将Wordpress安装到本地主机上,性能也是一样的。我使用xDebug来找出瓶颈是什么。几乎60%的时间需要load_plugin_textdomain和load_default_textdomain。我也不知道原因。有人能帮我吗?




文件位于url:CZ.mo,CZ.po
谢谢
发布于 2020-08-12 17:32:53
用于load_default_textdomain和load_plugin_textdomain的大量成本(使用缓存研磨的术语)在WordPress中是一种已知且被证实的低效率。其他分析器也在这个主题上达成了一致,根据具体情况,它们可以轻松地将页面加载时间增加一倍:
https://core.trac.wordpress.org/ticket/32052
简化:在非英语安装的每一个页面加载上,WordPress都会将文件加载和解析到内存中,但是在页面加载后丢弃已解析的信息。这种负载/解析操作占用了相当多的CPU,并且确实花费了相当多的时间。
这些翻译文件过去是纯文本文件(.po),但后来转移到编译后的二进制文件(.mo),在某种程度上减少了开销。然而,即使在今天,就“成本”而言,它仍然是35-40% (使用cache差使的术语)。
有一些(鲜为人知的)插件可以通过缓存解析的翻译来“修复”这个问题:
…只是关于这个问题的几个例子和更深入的调查。
这些插件通常会将默认的例程替换为包含缓存的默认例程,而且在解析未缓存的数据时通常也更有效。缓存的信息通常以瞬态缓存数据的形式存储,使用WP的对象缓存API。除非有像Memcached或Redis这样的特殊软件和一些对象缓存插件来将瞬态API与这些服务连接起来,否则WordPress默认情况下会将瞬态数据存储在自己的MySQL数据库中。
由于大多数主机提供商确实提供联网的MySQL服务器,因此可能会意外地将CPU密集型操作替换为网络密集型操作,将导致页面加载时间较高的一种原因替换为另一种原因。如果您的WordPress确实可以访问本地Redis或Memcache实例,则可以尝试上面提到的插件。
虽然通常推荐使用PHP的OPcache,但它并没有提供太多的好处: OPcache确实编译和缓存PHP源代码,但是执行缓存的源代码来解析翻译文件仍然比没有OPcache的代价高。
迁移到基于SSD的主机也没有改进:每个页面视图都加载了受影响的文件,因此它们非常频繁地被使用,并且很可能从内核的缓冲区缓存中得到服务,而不需要从任何类型的文件系统或块设备中进行任何读取操作。
缓存“一次执行”的PHP输出(通过使用特殊的缓存插件、CDN或像nginx快速CDN缓存这样的模块)可以成功地将任何低效率隐藏在其他WordPress插件或WP Core中。根据具体的解决方案和部署,使这些缓存的内容无效可能会变得相当棘手。
发布于 2018-02-19 15:05:10
TL;博士
确保在生产中禁用XDebug,并缓存站点的前端。
您的分析结果是在启用XDebug的情况下完成的(这是必须的)。观察绝对速度是误导的,因为XDebug本身就是他们速度慢的原因。
在我五岁的Macbook Pro上,我得到的结果和你几乎完全一样。从您的cs_CZ.mo文件加载翻译大约1.4秒。如果我禁用分析,这个值会下降到88毫秒。(关于x16更快)。如果我完全禁用XDebug,这个值会下降到30 if (大约x47速度更快)。
因此,关于您缓慢的页面加载,我的第一个问题是--在生产中启用了XDebug吗?如果是的话,关掉它。
如果您没有启用XDebug,而且页面加载速度仍然很慢,我认为最无聊的答案是尽可能多地缓存您的页面。有很多插件可以做到这一点。就我个人而言,我的整个网站都在Cloudflare后面。流量几乎不触及我自己的服务器。
尽管分析速度缓慢,但瓶颈无疑仍然是瓶颈,但这并不令人惊讶,因为您将在每个页面视图上加载数千个翻译。即使是在几十毫秒的每一个,它可以加起来。
您不能重写WordPress函数。他们用的时间和时间一样长。但是也许您可以改进磁盘I/O,钻入MO::import_from_reader方法,看起来大约40%的时间是在PHP代码之外花费的(可能是读取打开的文件)。一个提供SSD的托管提供商可能会给你提振,但我已经达到了。我认为缓存是最好的方法。
https://stackoverflow.com/questions/48852834
复制相似问题