(单线程)不同环境下的wordpress页面生成时间测试

WARNING: This article may be obsolete
This post was published in 2020-12-28. Obviously, expired content is less useful to users if it has already pasted its expiration date.

本文仅涉及:

  • 单线程测试程序
  • page generation time: timer_stop(1) 

本文不涉及:

  • 多线程压力测试、并发测试(比如apache2-utils、loader.io)
  • 各类页面缓存插件(page cache plugins)
  • 页面打开速度
  • GTmetrix跑分、pagespeed跑分、lighthouse跑分
多线程程序可以参考: 🔗 [Wordpress cache preload code (python3) - Truxton's blog] https://truxton2blog.com/wordpress-cache-preload-code-example-python3/

起因:在wordpress下安装了任意一款page cache相关的插件(比如w3 total cache、wp rocket)以后,wordpress网页的打开速度确实提升了很多很多。但打开一个非cache页面——比如一个搜索结果页面,或者操作wp-admin/*界面,仍然会很慢。

我的博客目前(2020-2021)部署在Fastcomet最便宜($2.95/m)的shared web hosting服务器上,无法开启opcache、object cache,也无法进行web server的切换。所以我购买了另一个VPS来进行一些娱乐性质的实验,通过切换几个不同的wordpress部署环境来进行性能对比,包括Apache、Nginx、OpenLiteSpeed、是否开启Opcache、是否开启object cache等。

Fastcomet

目前正在使用的web hosting供应商。

属性:

  • apache 2.4
  • php 7.4
  • 没有opcache、redia、memcached、varnish
  • 2GB内存
  • shared hosting,性能受限
  • 无法编辑php.ini文件

在主题里添加 timer_stop(1) 来显示页面生成时间:

<?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds using memory <?php echo round(memory_get_peak_usage()/1024/1024,2); ?> MB.
这个页面的生成时间为1.469秒

我在另一个VPS上跑一个python程序用于遍历整个sitemap,默认为单线程。结果显示,大部分页面的生成时间都在1.5秒上下浮动:

当然,如果开了多线程,结果会更加糟糕:

额外的VPS

  • 腾讯云标准型S2
  • 把我在fastcomet上托管的网站原封不动复制过来进行测试
  • Debian 10.2
  • 2GB内存
  • vcpu:1核
  • 为了排除外界干扰,限制了ip access,只允许python程序访问
  • python程序:1 thread

Apache

  • apache 2.4.6
  • php 7.4
  • mysql 5.7

初始环境

安装opcache,让运行环境尽可能和fastcomet一致:

结果:总体要比fastcomet好很多,毕竟我在fastcomet用的是最便宜的shared web hosting plan,性能处处受限。

+ Opcache

然后开启opcache:

页面生成时间普遍降低了4~5倍,由此可见opcache可能是提高性能最关键的一步,而fastcomet就正好不给我开opcache。

+ Memcached / Redis

额外跑了一下memcached和redis,但效果提升不是很明显,这种娱乐性质的单线程实验本身也很难精确体现出它们的优势。

Nginx

nginx就是走个过场,因为单线程程序完全体现不出nginx的优势。

  • nginx 1.19
  • php 7.4
  • mysql 5.7

理论上推测nginx和apache的结果应该差不多。事实也确实如此:

后续的memcached / redis也和上文一样,在单线程程序里难以体现出明显的性能提升。

OpenLiteSpeed

由于这是测试环境,无法申请到LiteSpeed,所以只能使用它的开源版本OpenLiteSpeed。

  • 使用官方的1-click-install安装
  • 使用默认配置:mariadb 10.2,LSPHP 7.4

初始环境

(OpenLiteSpeed默认开启opcache)

好吧,单从页面生成时间的角度来看,OpenLiteSpeed确实很强。

+ LSMCD UNIX Socket / Redis TCP

LiteSpeed Memcached (“LSMCD”) is LiteSpeed's persistent memcache-compatible cache daemon. It’s performance and interface are similar to the popular Memcached, with the addition of high-availability replication. In LSMCD, cache data is persistent on both single and multiple box setups -- preserving all cache data through updates and instances of server failure.

https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation

好吧,也尝试一下LiteSpeed推荐的LSMCD in UNIX Socket mode。

需要先编译一个LSMCD:https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation,然后安装LSPHP-memcached扩展,至少确保LiteSpeed能够连接127.0.0.1:11211;最后修改配置文件,把LSMCD TCP变成LSMCD Unix Socket。

此外Redis(这里用的是TCP模式)的测试也跑了一次:

总结

结果对比

注:FastComet:没有Opcache;Apache、Nginx、OpenLiteSpeed:已开启Opcache

后续

LiteSpeed很强,Opcache很关键,然而这又有什么用呢?我购买了1年的FastComet套餐,在折腾完这些优化实验后还是要面对FastComet的廉价共享主机。

* 补充:过了一年我搬出了FastComet,但并没有使用Litespeed,而是使用了nginx + fastcgi . 具体内容见:🔗 本站使用的插件 - Truxton's blog🔗 WordPress cache preload code (python3) - Truxton's blog .


 Last Modified in 2022-09-11 


Leave a Comment Anonymous comment is allowed / 允许匿名评论