另类WordPress优化:将缓存文件存储到内存盘高速读写
作为一个动态的CMS程序,WordPress优化手段一般是将动态页面转为静态页面。这种方式利用插件将首次访问的 PHP 动态页面生成 HTML 静态页面并存储在硬盘中,后续直接读取静态页面,从而减少数据库查询和 PHP 计算,提升WordPress访问速度。但是硬盘速度是远低于内存盘的,因此我们可以考虑将生成的WordPress缓存文件放到内存盘里面,速度自然更快了。
1.内存读写速度测试
在开始本文的教程之前,我们可以对常用的缓存文件存储位置:硬盘、memcached、redis和内存做一个读写测试
1.1 内存 Vs 硬盘
测试脚本代码,放到宝塔的计划任务里面,选择添加shell脚本
内存盘目录:/dev/shm/test
硬盘目录:/www/wwwroot/test.xcbtmw.com/test
#!/bin/bash
# 设置测试路径
MEMORY_PATH="/dev/shm/test"
DISK_PATH="/www/wwwroot/test.xcbtmw.com/test"
# 创建测试目录
mkdir -p $MEMORY_PATH
mkdir -p $DISK_PATH
# 文件大小 (500MB)
FILE_SIZE="500"
# 测试硬盘
echo "=== 测试硬盘读写速度 ==="
echo "写入测试 (硬盘):"
dd if=/dev/zero of=$DISK_PATH/bigfile bs=1M count=$FILE_SIZE oflag=direct 2>&1
echo "读取测试 (硬盘):"
dd if=$DISK_PATH/bigfile of=/dev/null bs=1M iflag=direct 2>&1
# 测试内存盘
echo "=== 测试内存盘读写速度 ==="
echo "写入测试 (内存盘):"
dd if=/dev/zero of=$MEMORY_PATH/bigfile bs=1M count=$FILE_SIZE oflag=direct 2>&1
echo "读取测试 (内存盘):"
dd if=$MEMORY_PATH/bigfile of=/dev/null bs=1M iflag=direct 2>&1
# 清理测试文件
rm -f $DISK_PATH/bigfile $MEMORY_PATH/bigfile
echo "测试完成,已清理测试文件。"
点击执行任务,可见结果为:
=== 测试硬盘读写速度 ===
写入测试 (硬盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 3.26227 s, 161 MB/s
读取测试 (硬盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 2.32547 s, 225 MB/s
=== 测试内存盘读写速度 ===
写入测试 (内存盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.289275 s, 1.8 GB/s
读取测试 (内存盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.104858 s, 5.0 GB/s
测试完成,已清理测试文件。
----------------------------------------------------------------------------
★[2024-12-12 19:23:16] Successful
1.2 内存 Vs memcached
本节测试节选自:https://www.znian.cn/4698-24.html
读取100000次数据
//使用memcache
require_once ‘tools/cache/memcached-client.php';
$mem = new memcached($options);
$mem->set(‘x’ , ‘0’);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->get(‘x’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);
连续运行三次脚本,结果分别为10.5,10.46,10.63
//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_get_contents(‘/dev/shm/php_system/vipcache’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);
——————————–
连续运行三次脚本,结果分别为3.2,3.25,3.2
写入100000次数据
//使用memcache
$mem = new memcached($options);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->set(‘x’ , ‘0’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);
连续运行三次脚本,结果分别为10.93,9.22,9.41,与读取测试结果相差不大,说明memcache的读与写时间是差不多的
//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_put_contents(‘/dev/shm/php_system/vipcache’ , ‘0’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);
连续运行三次脚本,结果分别为2.5,2.52,2.53,内存盘写跟读的性能一样优越!
1.3 小结
通过内存盘和硬盘、内存盘和memcached读写速度测试对比,我们可以发现内存盘速度是非常快的。相比 Memcached 和 Redis,内存盘具备配置简单、直接利用本地内存、支持文件系统操作和低资源占用的优势。它无需额外软件或网络通信,速度更快,使用更高效。
因此把缓存文件放到内存盘里面是非常合适的,不用担心丢失(缓存文件丢失也无妨),访问速度还快。
2.宝塔面板设置内存盘
宝塔面板有两种内存目录,二者区别如下:
- 第一种是固定的内存目录
/dev/shm
, Linux 系统默认配置,不可更改; - 第二种是使用Linux工具箱创建的自定义内存盘,基于内存的临时文件系统,例如 tmpfs 或 ramfs。相比第一种灵活性更高:可以通过手动挂载
tmpfs
或ramfs
,设置自定义挂载点、大小和访问权限。
/www/wwwroot/www.xcbtmw.com/wp-content/cache
,因此我们选择第二种内存盘是比较合适的。
2.1 挂载内存盘
(方法参考自:https://cloud.tencent.com/developer/article/1464010)
老白博客我用的是宝塔面板,可以直接通过Linux工具箱软件设置挂载内存盘
2.2 选择缓存目录
我们选择wordpress下的一个空的目录(可以自己创建)
如:www.xcbtmw.com/wp-content/cache
3.WordPress设置缓存目录
以WP Super Cache
插件为例,设置里把缓存位置换成刚才创建挂载在内存文件夹的目录即可
4.关于WordPress优化
缓存对象的选择:https://www.xcbtmw.com/31105.html#h25
优化参考:2024基于网站性能测试的WordPress优化指南
服务器端优化:宝塔面板nginx-php-MySQL提速指南
对服务器配置有要求吗?腾讯云轻量1核2G能用吗?
看网站缓存内容大小。以我的网站为例,400篇,缓存后html文件总大小为20MB,随便分配个100MB,应该几千文章没问题。