WordPress 网站速度优化:Redis、CDN(cloudflare)、缓存插件 wp super cache 区别

最后更新时间: 2024年11月18日

wordpress网站运行速度优化及原理解析 这一节,我们大讨论了优化 wordpress 的一些方向,那么今天就来详细说一下 wordpress 网站速度优化的常见手段。

我们在建立 wordpress 网站的时候需要考虑非常多的因素,当我们预算有限制选择了配置不高的服务器的时候,特别是比如网站使用了比较消耗资源的插件,如使用了网页构建器 elementor,比如使用了电商插件 woocommerce 的时候会发现网站不管是前端页面还是后台打开速度都比较慢,这对于用户体验来说是不好的,那如何在有限的服务器资源下优化网站的打开速度呢?今天就来跟大家介绍一下常用的一些技术手段,以及这些技术手段之间的差异。

需要说明的是,如果使用了 elementor, woocommerce 这种比较消耗资源的插件,服务器配置至少是2核CPU、 4G 内存以上,预算不够CPU可以选择 shared 类型的。

当我们服务器购买好,搭建 wordpress 运行环境的时候就要考虑如何提供服务器的性能,这时主要有以下因素需要考虑。

高性能基础 Web 环境搭建

wordpress 的基础运行套件是 php + mysql + nginx (这里不推荐apache), php 、mysql 、nginx 都是经常更新发布新版本的套件,同时 wordpress 更新也非常频繁,因此推荐大家都使用最新版本的运行套件,这样 wordpress 网站性能就有了基础保证。具体推荐如下(@2024.11.16)

  1. Ubuntu 22/24 lts 版本
  2. php 版本 8.2.19 以上,安装 Jemalloc 作为内存管理工具。
  3. mysql 版本 8.0.37 以上,使用Innodb 引擎。
  4. nginx 1.26.0以上。
  5. wordpress 6.6.2以上。

当我们基础的套件有了性能保证之后,下一步就是优化 wordpress 网站自身了,日常网站操作过程中,我们可以使用 top 命令监控服务器资源消耗情况。如下图为我频繁操作 woocommerce 后台订单等功能菜单时的负载

server-load-status
server-load-status

可以看到负载比较高了,2核心的服务器如果负载超过4后就会出现网站反应比较慢,不过一般前端用户访问的时候不会有这些高的负载,同时50个用户在线购物是没有太大问题的。后台操作的时候会出现比较大的负载问题,因此建议店铺整改一般放到用户访问量低的时候进行。

一般有以下手段提高 wordpress (使用了类似elementor, woocommerce插件)网站性能。

使用 Redis Object Cache

Redis 是数据库缓存服务,它把经常查询的数据结果缓存到内存中去,这样再次查询的时候就不用从数据库中查询了,而是直接从内存中返回,这样可以大大加快查询速度。

首先需要在服务器安装 redis-server,比如 ubuntu 下执行 sudo apt install redis-server, 安装完成后执行 redis-server /etc/redis/redis.conf 启动 redis-server, 然后执行 redis-cli ping 如果返回 pong 则说明 redis-server 启动成功。

然后安装 redis object cache 这个插件,连接即可。正常工作的 redis 状态如下图

redis-status
redis-status

缓存情况如下图

redis-chart
redis-chart

上边我们是把 mysql 服务,redis 服务都安装到一台服务器上,事实上一般规模比较大的网站会把 mysql, redis 等服务单独安装到一个服务器上,这样 mysql 性能, redis 性能就非常高了,当然这样做预算会相应较高。

使用 CDN 服务

通过使用 CDN 服务来缓存静态资源(js、css、 图片、 fonts等),减少服务器资源消耗,同时也可以减少带宽压力,一般配置较低的服务器相应的带宽也比较低,并且服务器是固定区域,比如我们服务器选择在美国洛杉矶,那我们网站的所有资源都要从美国洛杉矶传送到客户当前所在区域,客户遍布全球,离美国洛杉矶较远的客户就会感觉网站打开速度较慢。如果使用了 CDN 服务,则资源消耗,带宽问题和资源传输距离问题就都可以解决。CDN 会检测客户当前位置并把网站静态资源缓存到他们全球的边缘节点。如下图网站为使用购买阿里云CDN 服务的状态,可以发现所有静态资源都变为了 CDN 网址。

ali-cdn-url

当然在我们预算不够的情况下,我们可以选择 cloudflare 这的 CDN 服务,免费版的 cloudflare 提供基础 CDN 服务,同时还可以有一定的 DDOS 防护,并且可以隐藏真实 IP 地址增强服务器安全,个人网站或中小型项目推荐使用。使用 cloudflare 要把域名的 DNS 服务器换为 cloudflare 提供的

当我们使用了 cloudflare 服务之后如何知道服务有没有生效呢?并且有些页面我们是不希望缓存的,比如使用 woocommerce 的 cart, checkout , account 等页面是不希望被缓存的。当 cloudflare 服务解析生效后,即 dns 已经修改为 cloudflare 的,我们可以打开 chrome 的 network 查看一下请求响应。如下图

cloudflare-dynamic-resource

这里是请求 /cart 这个动态页面,可以看出 response 是 dynamic 的,因此 cloudflare 比较智能,动态资源不会缓存。下边再看看静态资源

cloudflare-static-resource

从这里可以看出静态资源是被缓存了的,不过显示 MISS,说明缓存没有命中,再次刷新页面可以看出状态变为 HIT ,如下图

cloudflare-static-resource-hit

不过免费的 cloudflare 不会保证很大概率的 HIT , Cloudflare 的边缘节点缓存有限 , 如果缓存空间不足,资源可能被清除。预算够的情况下可以升级使用付费版本。

使用 WP Super Cache 缓存插件

像类似 WP Super Cache 这样的缓存插件会把需要动态处理的页面全部变成静态,即把动态内容缓存起来,再次请求的时候直接请求缓存,不需要经过 php, mysql 的处理了,这样能非常明显的提升页面响应速度,再结合 CDN 服务,响应会更快。 首次请求的时候会经过 php , mysql 处理返回动态内容后缓存为静态 html 页面,这样下次再访问的时候就直接请求 html内容了,不需要走 php,mysql处理了,因此给用户的感觉是响应速度加快了。

如果我们一些页面不需要缓存的,则需要添加规则,比如 woocommerce 网站,则有些页面能缓存。

排除特定页面:

  • 在 Advanced 设置中,找到 Accepted Filenames & Rejected URIs。
  • 在 “Add here strings (not a filename)” 输入框中,添加 WooCommerce 动态页面的路径。
/cart/
/checkout/
/my-account/
/wc-api/*

然后保存,这些路径对应的页面将不被缓存,每次访问都会动态生成最新内容。

需要注意的是,如果同时使用 cloudflare 和 WP Super Cache 这样的插件,则要以 cloudflare 的 CDN 为准,WP Super Cache 的 CDN 功能就不要使用了两者会有冲突。

5/5 - (1票)