WordPress 最初是一个使用 PHP 语言开发的博客平台,用户可以使用包含 PHP 和 MySQL 数据库的个人服务器架设属于自己的网站,因为操作简单,功能细致而为人们所知。
但目前,正如你所见,WordPress 正在逐步衍化成一个一个内容管理系统(CMS),因此越来越多的人认为 WordPress 随着功能的增加运行速度也在不断变慢,如何优化 WordPress 站点,成了一个难题。
服务器
自改版网站从 typecho 转为 WordPress 后,速度明显大不如前,于是首先将原来的服务器配置进行了升级,但区别不大,之前使用的服务器配置为 2H2G,该配置已基本可以满足需求,流量不大无需升配。
至于下限尚未可知,之前有看过有大佬在使用子比主题的情况下使用 1H1G 的服务器同样运行流畅,原因是使用了服务器和数据库服务器分离。
使用 2H2G 的服务器已经足够,对于该配置或以下的服务器,如果能将服务器和 Mysql 分服务器(例如云数据库)安装,同样也能达到加速的效果,如网站访问量大,按需求升配即可。
数据库优化
数据库优化是较为关键的一环,不论选择哪种数据库,我们都无法避免的会遇到各种各样的优化难题,主要体现在数据库性能和负载能力。
对于这类问题,主要有几种解决方案:
- 上面提到过的,数据库和网站服务器分离。
- 使用 PHP 插件对数据库进行缓存处理,例如 Memcached、Redis。
注意,上面提到的两种 PHP 插件选择其一即可,个人认为 Redis 的效果是优于 Memcached 的,并且可以使用 WordPress 的专属插件:Redis Object Cache 来进行优化。
启用该插件必须事先在服务器中安装Redis、PhpRedis v3.1.1或以上版本,若为宝塔面板,在 PHP 版本中安装 Redis 即可,宝塔面板会自动安装 PhpRedis 扩展。
define('WP_REDIS_CLIENT', 'pecl'); # 指定用于与Redis通信的客户端
define('WP_REDIS_SCHEME', 'tcp'); # 指定用于与Redis实例进行通信的协议
define('WP_REDIS_HOST', '127.0.0.1'); # Redis服务器的IP或主机名
define('WP_REDIS_PORT', '6379'); # Redis端口
define('WP_REDIS_DATABASE', '0'); # 接受用于使用该SELECT命令自动选择逻辑数据库的数值
define('WP_CACHE_KEY_SALT', 'wp_'); # 设置所有缓存键的前缀(Wordpress多站点模式下使用)
define('WP_REDIS_MAXTTL', '86400');# 缓存时间,以秒为单位
define('WP_REDIS_PASSWORD', '');# 设置Redis密码(若没有可以删除)
安装后,在网站根目录中找到 wp-config.php ,添加以上代码,如图所示,可根据注释修改参数:
随后在插件中开启缓存功能,若显示已连接,则表示插件配置成功:
该插件也有付费高级版,不建议新手使用,但在效果上和免费版效果更好,本站使用的即为付费版,详请查阅 Object Cache Pro 官方文档,本站配置如下,授权码在购买后可以在购买处查看:
// 基础缓存配置,如需定制参数可阅读下方教程或插件文档
define('WP_REDIS_CONFIG', [
'token' => '你的授权码', //
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0, // 数据库编号,同服务器中不同站点不能使用相同数据库编号,否则冲突。
'maxttl' => 3600 * 24 * 7, // 7 天
'timeout' => 1.0,
'read_timeout' => 1.0,
'split_alloptions' => true,
'debug' => false,
'prefetch' => true, //预先加载
'async_flush' => true, //异步刷新
PHP优化
PHP 的版本仍在不断升级更新中,很多用户在版本选择上犯难,其实若无特殊需求,目前最适合 WordPress 运行的版本仍是 7.4 ,但本站在前段时间升级到 8.1 后发现速度略微变快。
因此我总结为,PHP版本应视服务器配置而定,如服务器配置不高,建议选择稳定版 7.4,如果服务器性能过剩,可以考虑更高版本的 PHP 版本。
另外,适当安装 PHP 拓展也对网站运行速度有所提升,这里建议安装 OpCache 与 APCu 扩展,它们都能提升 PHP 程序的执行效率,有助于提高速度。
此外,不建议安装过多无用的 PHP 拓展,安装过多的拓展也会导致速度变慢,如果不需要,尽量不安装,本站安装的拓展如图所示:
还可以根据自身的服务器性能情况,对 PHP.ini 做一些自定义设置,以完全发挥主机性能。例如:memory_limit、max_execution_time等,宝塔可以对其进行一键设置:
WEB优化
我们常常听到有人提起所谓的 WEB 优化,WEB 优化是指对网站运行的服务器框架进行优化,即 Nginx、Apache等,那么到底有没有必要进行 WEB 服务器区分选择。
我个人认为,小型网站没必要纠结于服务器框架的性能问题,仅需要自己对使用的 WEB 服务器有所了解即可,即最熟悉的就是最好的。
目前个人站长使用的都是宝塔,基本上都为 Nginx ,个人认为对于 Nginx 只需要做好 Gzip 及 Brotli 压缩即可,也有用户,目前国内常见的大厂 CDN 都配有 Gzip 和 Brotil 压缩:
若使用的是小众 CDN ,无类似功能或不打算套 CDN,可以自行在源站配置。这里以宝塔为例:
Gzip
Gzip 是目前常见的主流压缩方式,宝塔一般默认是开启 Gzip 压缩的,但默认的压缩率都为 1。
可以自行在 Ngixn 管理>性能调整修改压缩率,个人认为 6 最佳,亲测 6 以上的压缩率几乎差别不大,没有速度上的改变。
Brotli
Brotli 是近几年兴起的一种数据压缩方式,从效率上来说要高于 Gzip 的 15% 以上,且两者并不冲突,所以建议两者共同开启。
如需安装 Brotli ,需自行从 Git 下载 :
cd /www/server
#下载brotli
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
#更新brotli
git submodule update --init
以宝塔为例,安装成功后,需在宝塔面板卸载重装当前的 Ngixn 版本,并在重装时选择编译安装,添加以下自定义模块:
模块名称:ngx_brotli
模块描述:ngx_brotli
模块参数:--add-module=/www/server/ngx_brotli
安装成功后,需要在 Ngixn 管理>配置修改中的 http 段添加以下配置:
# brotli
brotli on;
brotli_comp_level 1;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml text/javascript image/tiff image/svg+xml application/json application/xml;
重新设置后,可以自行在 content-encoding 表头处查看开启是否成功。
主题
对于主题的优化明显不在个人的考虑范围内,我相信目前国内的主题作者都会对主题进行速度优化,作为技术小白,我们能做的就是对主题的选择。
主题作为 WordPress 的一种扩展程序,如无特殊需求,不建议安装功能过多的主题,功能多难免拖缓运行速度,按需选择主题也是维持网站速度的一个重要方式。
当然,选择目前使用人数多的主题也未必不是一种好方法,毕竟使用人数与主题的优化教程、资料文档挂钩,使用这类主题会有更全面的优化方案。
针对子比主题,如果参照完上述内容依旧无法做到数据库查询降至 300ms 以下,请将 PHP 版本升级到 8.0 或降级到 7.2 ,有明显加速效果,且 centos 版本不应低于 8.0(使用腾讯云请注意,不是 stream 版本,直接安装腾讯优化过的纯净版即可。)
插件
插件优化是本站优化环节中耗时最长的环节,试过无数的优化插件,诸如: WP Fastest Cache 、W3 Total Cache Pro 等都有尝试,最终还是选择了 Wp Rocket + Perfmatters 的组合。
WP Rocket
虽说是各有各的优点,但 WP Rocket 无疑是非高端玩家优化站点的最优解,WP Rocket 的操作简单、学习成本低,上手即用,并且插件配置也符合现代审美:
启用 WP Rocket 后就已经有了加速效果,但仅靠系统设置远远不够,我们仍需优化,进入 WP Rocket 设置后,参考以下步骤进行优化:
缓存设置
缓存配置方面,建议只开启移动端优化(因主题原因开启了移动端单独缓存,如是自适应主题,则不需要开启),用户端缓存不建议开启,多用户主题开启用户缓存,可能会令任何一个登录账号的用户都获得管理员权限。
文件优化设置
文件优化配置如上所示,如站点支持 HTTP 2,只开启压缩 CSS 文件及递送优化、压缩 JS 文件和 JS 延迟执行即可,如不支持 HTTP2,你可以开启合并 HTTP 文件。
递送优化有两个选项:移除未使用的 CSS 和异步加载 CSS 文件,推荐开启的是移除未使用的 CSS,但该功能也具有不稳定性,我目前发现的不兼容问题仅有 Simple MathJax 插件,子比主题如果开启这项功能务必排除 min.css
,我目前发现的子比主题相关问题是开启后未登录用户的付款页面会存在 css 问题,原因是该功能会把初始加载时不使用的 css 全部清除。
如果开启后页面异常,请更换为异步加载 CSS 文件,这里需要注意的是,如果使用源站域名套用 CDN,异步加载可能会失败。
延迟执行是指在交互时才触发必要的 JS 文件,容易引起页面异常,不建议非专业人士使用,而JS 异步加载是将 JS 文件放到了页脚。
子比主题如出现异常,请把主题文件夹排除:
#排除css文件
/wp-content/themes/zibll/(.*).css
#排除js文件
/wp-content/themes/zibll/(.*).js
如插件有异常,请自行排查,排除插件文件夹,个人目前未发现问题。
如使用了 APlayer 也需要将其放置目录排除,否则,页面上的音乐播放器需要手动滑动才加载。
即便文件不在服务器内,插件也会对文件进行本地缓存,如不需压缩,请手动排除:
- 内部(服务器内文件): URL 的域名部分将被自动删除。可用 (.*).js 通配符来匹配所有相似文件。
- 第三方(使用 COS 等储存服务及外部链接):使用完整的 URL 路径或仅使用域名来排除外部 JS。
媒体设置
媒体优化方面,建议开启图片、视频和框架的懒加载,大部分主题目前是自带图片懒加载的,但自定义程度并不高(子比已经较为完全),可以开启该选项手动排除不需要懒加载的图片(例如logo、主页轮播图等),未发现异常,但不建议和子比主题的懒加载共同开启,自行斟酌。
子比主题目前发现的懒加载问题在于:如果你使用了第三方云储存,那么你的图片可能无法放大查看(不点击显示是正常的),本地储存的图片是正常的。
图片尺寸方面不建议开启,可能跟部分未设置宽高的图片尺寸有冲突,这样会优先选择插件设置的尺寸,导致图片显示异常。
预缓存设置
预缓存是一项非常有用的设置,如你已设置定时全局缓存刷新,务必开启此功能。
开启后会在刷新缓存后重新生成新的缓存,即便未开启定时清理缓存,也有必要开启该功能,WP Rocket 在一些情况下同样会自动刷新缓存,刷新机制如下:
- 设置了自动清理全局缓存刷新间隔时。
- 当手动清除全局缓存时,只会自动预加载主页,解决方式请看【进阶优化】。
- 在用户变更了仪表板>外观>自定义中的任何选项,WP Rocket 会自动清除全站缓存。
- 当发布或更新任何内容时,WP Rocket 会自动清除该内容和任何与之相关的其他内容(即主页、类别、标签、分页等)的缓存。
- 如自行设置了高级设置>始终清除 URL,那么不论以上面提到的任何方式清除缓存都会自动清除在该选项框中输入的 URL 缓存。
如无法判断是否生效,可以查看站点目录文件夹:/wp-content/cache/wp-rocket/域名
来判断该页面是否被缓存。
链接预取是指当用户的鼠标经过某个链接时,预先下载对应网页,所以当用户点击链接时会觉得加载速度非常快,建议开启。
DNS 预读取能够更快地加载外部文件,建议开启,如不知道自己的网站调用了哪些外部域名,可以通过 F12 查看自己的站点>资源来获取这些域名:
预加载字体同理,本站无需要加速的字体,因此未填,如有需求F12在网络>字体来获取内容:
注意这里的字体必须托管在自己的域名中,如在其他站点,需在 CDN 标签页中添加这个域名再添加字体文件路径。
高级设置
高级设置多为个人需求配置,单独设置不需要缓存的页面或用户,自行按需配置即可。
数据库设置
数据库设置可以优化和减少数据库冗余,建议开启自动清理,每天对修订版本、回收站评论和回收站文章进行处理。
CDN设置
CDN 设置无需多言,如使用 CDN 后,自行在这里开启并填写自己的 CDN 域名即可。
如使用的 CDN 域名和源站域名,可不做配置,如 CDN 域名和源站域名不同,如在腾讯云使用的域名是 cdn.xxx.cn,源站域名为 www.xxx.cn,可在这里开启地址重写。
如果使用腾讯云 CDN 可以参考以下配置,基本上适用于所有博客站点:
之前本站使用的也是腾讯云 CDN,但发现用处不大,且腾讯云 CDN 也并不附带防御机制,因此改换到了【清酒云 SCDN】,如有需要可以联系我获取单独折扣,速度不必多言,自行体会本站。
清酒云 SCDN 国内个人版目前仍在活动中,
- 加速区域:中国大陆
- 解析数 1 条、套餐不限流量,不限请求。
- 智能 WAF 防护、智能调度、节点 5 主 3 备。
- 分布式 DDoS 清洗、CC 攻击自适应识别过滤80%。
Perfmatters
Perfamatters 是一款轻量级的优化缓存插件,个人认为是 WP-Rocket 的最好搭档,解决了一些无法处理的小问题,建议配置如下:
脚本管理器不建议新手使用,可以用于移除页面里没用到的 CSS、JS:
开启脚本管理器后,用户可以在文章页面看到脚本管理器,并对某个页面的 CSS、JS 进行单独处理:
脚本管理器中详细的说明了该页面所使用到的一切 CSS、JS 文件,用户可以根据使用需求单独禁用该页面中的脚本来提高该页面的运行速度,再次提醒,新手不建议使用!!
禁用任何一个脚本后,可以选择禁用在任意位置、登录/未登录、移动端/桌面端上禁用该文件的加载,同样也可以使用正则表达式来区分需要禁用的位置:
Perfamatters 还提供了谷歌字体禁用与本地化的功能,用法也很简单,如下图所示:
其余未提到的功能都与 WP-Rocket 重合,如有兴趣可以进行对比,这里不做介绍,如果使用了 WP Rocket ,在变更了 Perfmatters 的设置后,要清除缓存才会生效。
图片优化
图片优化方面如果有能力尽量使用第三方储存,毕竟第三方储存的功能方面已经基本饱和,不需要再自行对图片进行压缩、转换等处理:
如配置了 HTTPS ,也可以通过使用腾讯云的 HTTPS 专项优化来加快运行速度:
如使用腾讯云 COS,可以使用腾讯云提供的单独【配置插件】,对图片进行处理,开启后腾讯云将自动把图片同步到设置好的储存桶内,可按自己需求按需调整选项。
新手使用腾讯云 COS 请务必做好防盗链、阈值处理,不建议使用腾讯云提供的图片链接,请自行接入自定义 CDN 链接,以防止被盗刷、恶意获取资源而导致的过多付费。
设置 IP 访问频次、如有需要可设置黑白名单,如还存疑可自行开启地区访问限制等操作来防止国外恶意 IP 盗刷流量,国内 IP 建议尽快完成公安备案或许法律保护、使用带有防御的 CDN 来隐藏真实 IP 。
地区访问控制建议只开启中国境内:
进阶优化
进阶优化是对 WP-Rocket 的再提速优化项目,需要更改服务器系统文件及部分 WordPress 文件,请自行考虑是否需要优化,如因进阶优化而导致的问题,作者概不负责。
手动清除缓存
之前说过如果在 WP-Rocket 中手动清除全局缓存时,只会自动预加载主页,其他页面不会自定预加载,如果需要处理,必须要一个页面一个页面的去点击才能生成缓存。
那如果文章有上千篇呢?很显然不现实,因此这是一个必须要解决的问题。
WP Rocket 预加载依赖于 WP Cron,而 WP Cron 又依赖于 WordPress 中的 PHP 页面加载,也就是说只有访问 WordPress 的 PHP 页面(非缓存页面)才会驱动 WP Cron 执行。
那岂不是成了一个死循环?非也。
最佳解决方案就是关闭 WordPress 的计划任务,用系统的计划任务取代它。具体方法如下:
在 WordPress 的 wp-config.php
配置文件中添加以下代码:
//禁用WP_CRON计划任务
define('DISABLE_WP_CRON', true);
在宝塔面板中增加手动执行代码(更改为你的域名):
wget -q -O - https://www.syys.cafe/wp-cron.php?doing_wp_cron >/dev/null 2>&1
执行周期可以根据网站的更新频繁程度来改变,十分中基本上适用于大多数网站了:
当然,如果你不想用这个方法,也可以通过 WPJAM 插件中的定时作业功能,每次刷新后手动启用该任务:
Rocket-Nginx
Rocket-Nginx 是一款得到了 WP-Rocket 官方推荐 的插件的插件,它使 NGINX 能够直接提供以前缓存的文件,而无需调用 WordPress 或任何 PHP,还能通过浏览器缓存将标头添加到缓存的 CSS、JS 和图像中。
以宝塔为例,nginx.conf 文件默认情况下位于/www/server/nginx/conf
,如果不在,请自行调整安装的位置:
cd /www/server/nginx/conf
git clone https://github.com/satellitewp/rocket-nginx.git
下载成功后,我们需要为 Rocket-Nginx 生成默认配置文件:
#进入目录
cd rocket-nginx
#生成默认文件
cp rocket-nginx.ini.disabled rocket-nginx.ini
#启动命令
php rocket-parser.php
执行成功后,会在当前目录下生成 default.conf 文件,该文件为 Rocket-Nginx 的默认配置文件。
如果需要自定义某些配置,则需要编辑 rocket-nginx.ini 文件(找不到就全局搜索),然后重新执行启动命令。
完成后,还需要将以下 Rocket-Nginx 配置引入到 Nginx 的主机配置文件中,宝塔面板放入站点伪静态即可。
# Rocket-Nginx 配置
include rocket-nginx/conf.d/default.conf;
具体位置如下:
完成后,重载 Nginx 配置即可完成 Rocket-Nginx 的全部安装。
自定义预缓存参数
如果文章内容过多,在开启预缓存后会导致 CPU 占用率过高,甚至导致服务器崩溃,因此我们如果使用的服务器配置过高,建议自行配置预缓存参数。
以下代码来自站长帮,将该代码添加至当前使用主题的 functions.php 文件中,可根据注释自定义调整,来降低CPU占用率。
/**
* 批量大小
* 更改每批预加载的 URL 数量,默认为 45。
* 较低的值可以让服务器一次处理更少的请求
*/
function preload_batch_size( $value ) {
// 更改此值,默认为 45 个网址:
$value = 35;
return $value;
}
add_filter( 'rocket_preload_cache_pending_jobs_cron_rows_count', 'preload_batch_size' );
/**
* CRON 间隔:
* 以秒为单位设置所需的 cron 间隔
* 通过设置更高的值,服务器将有更多的时间在处理批次之间休息。
*/
function preload_cron_interval( $interval ) {
// 更改此值,默认为 60 秒:
$interval = 120;
return $interval;
}
add_filter( 'rocket_preload_pending_jobs_cron_interval', 'preload_cron_interval' );
/**
* URL请求之间的延迟:
* 这是对同一 URL 的请求之间的延迟。
* 默认为 0.5 秒(500000 微秒)
*/
function preload_requests_delay( $delay_between ) {
// 编辑这个值,单位秒
$seconds = 0.6;
// 不要修改这里
$delay_between = $seconds * 1000000;
return $delay_between;
}
add_filter( 'rocket_preload_delay_between_requests','preload_requests_delay' );
当然,你如果觉得服务器性能过剩,可以通过添加以下代码来加快预缓存的速度:
/**
* 将预加载速度提升一倍
* 如果要提升3倍,可将下方的 2 改成 3
*/
function wpr_increase_action_scheduler_concurrent_batches( $concurrent_batches ) {
return $concurrent_batches * 2;
}
add_filter( 'action_scheduler_queue_runner_concurrent_batches', 'wpr_increase_action_scheduler_concurrent_batches' );
本站所有文章版权遵从岁有余生免责条款,请自行查阅。
- 最新
- 最热
只看作者