宝塔面板opcache.preload优化加速WordPress

PHP性能优化是每个开发者的必修课。随着PHP 7.4的普及,其内置的OPcache新特性opcache.preload成为了提升性能的关键。本文地质网老白将聚焦于这一强大的PHP性能优化工具,为你提供一份基于宝塔面板优化加速WordPress的实操指南。

宝塔面板opcache.preload优化加速WordPress

(本文转载自:https://www.banzhuti.com/opcache-preload-wordpress.html,感谢分享)

OPcache 简介

OPcache 是 PHP 的一个扩展,用于缓存已编译的 PHP 脚本,从而避免每次请求时重复编译代码,显著提升 PHP 脚本的执行效率。OPcache 通过将 PHP 脚本编译成字节码并缓存到共享内存中,使得后续请求可以直接使用缓存中的字节码,而无需重新编译。

opcache.preload 的工作原理

opcache.preload 是 OPcache 在 PHP 7.4 中引入的一个新特性,它允许在 PHP 进程启动时预加载一组 PHP 文件到 OPcache 中。这些预加载的文件在后续的请求中可以直接使用,而无需再次编译。

具体来说,opcache.preload 的工作流程如下:

预加载阶段:在 PHP 进程启动时,OPcache 会根据配置的预加载脚本列表,将这些脚本编译成字节码并缓存到共享内存中。

请求处理阶段:当接收到请求时,如果请求的脚本已经在预加载列表中,OPcache 直接使用缓存中的字节码,而无需再次编译。

自动刷新:如果预加载的脚本发生更改,OPcache 会自动重新加载这些脚本,确保缓存中的字节码是最新的。

配置 opcache.preload

要启用 opcache.preload,需要在 PHP 配置文件中进行相应的设置。以下是一个典型的配置示例:

(注意修改preload文件位置)

opcache.enable = 1
opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=80000
opcache.revalidate_freq=3
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.jit_buffer_size=128m
opcache.jit=1205
extension = /www/server/php/84/lib/php/extensions/no-debug-non-zts-20240924/igbinary.so
; 预加载配置
opcache.preload=/www/wwwroot/www.dzw6.com/preload.php
opcache.preload_user=www-data

宝塔面板

在php.ini中

宝塔面板opcache.preload优化加速WordPress

WordPress创建preload.php

推荐放到WordPress网站根目录

<?php
/**
*使用OPcache优化WordPress的预加载脚本。
*地质网www.dzw6.com
*将此文件放在WordPress安装的根目录中。
*/
// Define the base path for WordPress
define('WP_ROOT_DIR', __DIR__);
// Define ABSPATH (required by WordPress core files)
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', WP_ROOT_DIR . '/' );
}
// Define WPINC (required by wp-includes/functions.php)
if ( ! defined( 'WPINC' ) ) {
define( 'WPINC', 'wp-includes' );
}
// Define WP_DEBUG (required by wp-includes/functions.php)
if ( ! defined( 'WP_DEBUG' ) ) {
define( 'WP_DEBUG', false );
}
// 仅预加载最基本的核心文件
require WP_ROOT_DIR . '/wp-includes/default-constants.php';
require WP_ROOT_DIR . '/wp-includes/rewrite.php';
require WP_ROOT_DIR . '/wp-includes/theme.php';
require WP_ROOT_DIR . '/wp-includes/post.php';
require WP_ROOT_DIR . '/wp-includes/meta.php';
require WP_ROOT_DIR . '/wp-includes/user.php';
require WP_ROOT_DIR . '/wp-includes/capabilities.php';
require WP_ROOT_DIR . '/wp-includes/shortcodes.php';
require WP_ROOT_DIR . '/wp-includes/class-wp-query.php';
require WP_ROOT_DIR . '/wp-includes/class-wp-widget.php';
require WP_ROOT_DIR . '/wp-includes/class-wp-roles.php';
require WP_ROOT_DIR . '/wp-includes/class-wp-user.php';
require WP_ROOT_DIR . '/wp-includes/class-wp-post.php';
// Preload database-related files
require WP_ROOT_DIR . '/wp-includes/wp-db.php';
// require WP_ROOT_DIR . '/wp-includes/class-wpdb.php'; // 如果不需要,可以注释掉

不同 PHP 版本的性能表现

PHP 7.2:不支持 OPcache Preload,性能提升有限,仅能利用 OPcache 缓存已编译的字节码。

PHP 7.4:引入 OPcache Preload,性能显著提升,特别是在预加载大量文件时。

PHP 8.0 及更高版本:进一步优化 OPcache Preload,性能更佳,可能包含更多的内存管理和执行优化。

测试场景

我们选择一个典型的 PHP 应用(例如,WordPress系统)作为测试对象,该应用使用 Composer 管理依赖,并包含多个控制器和模型文件。

测试方法

基准测试:关闭 OPcache,测量应用的响应时间。

OPcache 启用测试:启用 OPcache,但不启用 opcache.preload,测量响应时间。

OPcache + Preload 测试:启用 OPcache 并配置 opcache.preload,测量响应时间。

测试结果

测试场景 平均响应时间 (ms) 每秒请求数 (TPS)
无 OPcache 120 83
OPcache 启用 80 125
OPcache + Preload 60 166

从测试结果可以看出,启用 opcache.preload 后,应用的平均响应时间从 80ms 降低到 60ms,每秒请求数从 125 提升到 166,性能提升约 33%。

分析与讨论

opcache.preload 的性能提升主要体现在以下几个方面:

减少编译时间:通过预加载常用脚本,减少了每次请求时的编译时间,特别是在脚本数量较多时,效果更为显著。

降低内存碎片:预加载机制可以更有效地管理内存,减少内存碎片,提高内存利用率。

加快请求响应:由于脚本已经编译并缓存,请求处理速度更快,提升了整体性能。

然而,需要注意的是,opcache.preload 并不适用于所有场景。例如,对于动态生成的脚本或频繁更改的代码,预加载可能会带来不必要的开销。因此,在实际应用中,需要根据具体情况进行权衡和配置。

优缺点分析

优点

显著提升性能:特别是在高并发场景下,性能提升明显。

简化配置:通过预加载脚本,减少了运行时的编译开销。

兼容性好:适用于大多数 PHP 应用,尤其是使用 Composer 管理依赖的应用。

缺点

配置复杂:需要编写预加载脚本,并确保预加载的文件无副作用。

内存消耗:预加载会占用更多的共享内存,需要根据应用规模进行调整。

不适用于动态脚本:对于频繁更改的脚本,预加载可能带来负面影响。

最佳实践

合理选择预加载脚本:只预加载那些频繁使用的、稳定的脚本文件。

避免副作用:确保预加载的脚本没有输出或其他副作用,否则可能导致不可预测的行为。

监控内存使用:定期监控 OPcache 的内存使用情况,避免内存不足导致性能下降。

结合其他优化手段:如使用 APCu、数据库连接池等,进一步提升应用性能。

进一步优化

服务器端优化:宝塔面板nginx-php-MySQL提速指南

hsts:WordPress网站宝塔面板开启HSTS预加载

压缩:Gzip、Brotli 和 Zstandard 压缩对比和适用性说明

通用优化:https://www.dzw6.com/tag/wordpress_optimization

给TA打赏
共{{data.count}}人
人已打赏
网站建设

7b2主题评论框"涂鸦"功能快捷关启

2025-9-14 15:59:10

网站建设

7B2主题阅读权限管理插件B2 Perm Manager Pro

2025-4-24 10:45:08

🚨 小黑屋
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索