在过去几年中,薇晓朵被问到最多的一些技术问题就是网站的速度优化方面,最简单粗暴的方式就是提升硬件配置和网站内部结构优化,以及压缩图片视频、 CSS/JS 、 CDN 、做 HTML 页面缓存的方式。
对于这些传统的网站优化方式大部分的中小型站点均适用,但如果你的网站流量和数据量都已经处于一个非常大的量级,那么再做上面这些 「表面」 功夫得到的效果实际上是微乎其微的。
到了这个阶段,我们需要做两个决策:
1 、拆分现有站点的网站数据或者数据库表,做多数据库架构改造;
2 、尝试添加对象缓存 (Object Cache) 来提升网站速度性能;
对象缓存涉及存储数据库查询,当在您的 WordPress 站点上启用时,它可以帮助加快 PHP 执行时间、减少数据库负载并更快地向访问者提供内容。
不是每次用户访问网站时都加载网站的每个部分,而是对象缓存存储数据库查询,以便在需要时更快地检索内容。有很多不同类型的对象缓存,例如浏览器缓存、页面缓存、移动缓存和用户缓存。
一、什么是 WordPress 对象缓存?
对象缓存是一个存储数据库查询结果的过程,以便在下次需要时快速恢复它们。缓存的对象将从缓存中迅速得到服务,而不是向数据库发送多个请求。这更有效,并减少了服务器上大量不必要的负载。
简单来说,对象缓存允许将经常使用的对象复制并存储在更近的位置,以便更快地使用。
高效的数据库允许大型高流量网站为世界各地的高质量媒体提供服务。
服务器超载会导致网站性能不佳和用户体验不佳。当您在您的网站上设置对象缓存时,它将减轻您服务器的压力并仅在需要时创建数据库查询。
举个不太恰当的例子说人话就是:
无对象缓存:当有人访问你的网站时,没有对象缓存时是实时走数据库里调取数据,那么每次查询都会把所有数据表查询一遍。类似一个房间里有 100 个人,每个人都有自己的唯一编号及名字,当有人在门外叫喊编号比如 17,那么房间里的人就从 1 2 3 开始报数直到找到 17 。这种效率非常低,而且会增加太多无用的查询时间。
有对象缓存:添加了对象缓存后就像是在这个房间里,100 个人预先给他们列了一个名单挂在门口,然后当有人在门外叫喊编号或名字时可以精确的找到这个人,让他直接出来,也就无需再进行逐个报数。
二、如何做 WordPress 对象缓存?
WordPress Object Cache 对象缓存目前最好用的两个方案是 Redis 和 Memcached 下面我们会逐步讲到。
注意:配置以下 Object Cache 对象缓存操作前需要在服务器中做出相应的基础软件配置,盲目安装启用相关插件可能导致站点崩溃,请联系专业人士进行服务器部署和插件规则配置工作。
1 、 WP Redis
Redis 是迄今为止领先的持久对象缓存 WordPress 插件之一。 Redis 是一个开源的内存数据结构存储。它集数据库、缓存和消息中心于一体。它适用于许多数据结构,例如字符串、哈希、列表、集合等。
Redis 具有许多强大的功能,包括内置复制、脚本和磁盘持久性。 Redis Sentinel 和 Redis Cluster 分别提供了额外的特性,包括高可用性和自动分区。内存数据集是 Redis 提供的高性能的关键特性。
您可以通过分配刷新和转储新数据的时间或在重新启动 Redis 时记录新更改以更新来编辑对象的持久性。或者,如果您需要定期更新内容,则可以禁用此功能。
最受欢迎的 WordPress 插件是 Redis Object Cache 对象缓存,安装量超过 60,000 。它易于安装和设置。激活插件后,导航到设置> Redis,然后单击 「启用对象缓存」 。
2 、 WP Memcached
Memcached 也是一个开源的分布式内存缓存。与 Redis 类似,它用于通过减轻负载数据库来优化动态 Web 进程的流量。 Memcached 将数据对象存储在动态内存中。
一种简单的思考方式是 「短期记忆」 。所有信息都存储在 RAM 中,因此一旦空闲内存用完,最旧的数据就会被推出并替换。每当数据更改或过期时,Memcached 都会自动更新缓存以加载新内容。该软件使用散列算法和不断访问和引用的内部散列表来跟踪和调用所有数据。
有许多支持 Memcached 的兼容 WordPress 插件,安装时会检查以确保您的服务器上安装了 Memcached 。 W3TC 是一个很棒的插件,它支持 Memcached(以及 Redis) 。安装并激活后,导航到常规设置 > 页面缓存方法并选择 Memcached 。
三、谁需要 WordPress 对象缓存?
对于 Redis Object Cache 和 Memcached Object Cache 两种技术方案如何选择要取决于当前 WordPress 网站的规模和服务器架构,还有就是后续的开发方向。
薇晓朵 (Weixiaoduo.com) 网站现身说法的就是我们目前正在使用 Redis 对象缓存,不过并不是单一只用 Redis,而是通过在 WordPress 网站内部优化和做缓存加速后再通过 Object Cache 对象缓存实现的加速。
同样的,我们还做了以下工作:
- WordPress 静态文件分离;
- WP Rocket 缓存加速;
- WordPress 全站 CDN 加速;
- WordPress 图片 jpg 、 png 转 webp 格式;
- WordPress 数据库拆分为多数据库分布式架构 (进行中)
至于为什么要做这些操作也是因为前几个月被阿里云的工程师给的回复整懵了,我们网站速度变得奇慢无比,然后实在没办法了让协助排查下原因,结果给到的回复是我们的数据量太大导致扫描和执行时间过长。
几亿行数据要查询近 7 个小时。
后面发现这样下去确实不行,就测试了很多办法,最后终于还是实现了想要的效果,虽然对目前的网站性能及速度并不是最佳,但依旧是保障了我们的业务和整个平台的平稳运行,这就是折腾的意义和目的了。
另外预告下
- Redis Object Cache (wpredis.com)
- Memcached Object Cache (wpmemcached.com)
更多信息及服务,过段时间可以通过对应 WordPress 小站找到。
发表回复