博客 / WordPress/ WordPress 性能监控指南:实时查看查询次数、执行时间与内存占用

WordPress 性能监控指南:实时查看查询次数、执行时间与内存占用

WordPress 性能监控指南:实时查看查询次数、执行时间与内存占用

WordPress 性能监控:查询次数、执行时间与内存占用

在 WordPress 开发或性能优化过程中,了解页面的数据库查询次数、PHP 执行时间以及内存消耗是非常有用的。本文将介绍一个简单实用的函数,用于在页面中显示或隐藏这些性能指标。

核心性能监控函数

将以下代码添加到您当前主题的 functions.php 文件中:

// 显示页面查询次数、加载时间和内存占用
function performance( $visible = false ) {
    $stat = sprintf(
        '%d queries in %.3f seconds, using %.2fMB memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
    );
    echo $visible ? $stat : "";
}

函数说明:

  • get_num_queries(): 获取当前页面加载过程中执行的数据库查询总次数。
  • timer_stop( 0, 3 ): 获取页面从开始加载到调用此函数时的 PHP 执行时间(以秒为单位),参数 3 表示保留 3 位小数。
  • memory_get_peak_usage(): 获取 PHP 脚本执行过程中消耗的峰值内存(以字节为单位)。除以 1024 / 1024 后转换为 MB。
  • 参数 $visible: 控制输出方式。为 true 时直接在页面中显示;为 false 时则输出为 HTML 注释,仅在查看网页源代码时可见。

调用方法

在您希望显示性能数据的地方(例如主题的 footer.php 文件),插入以下调用代码:

<?php if (function_exists('performance')) performance(false); ?>

将参数 false 改为 true,即可在前端页面直接显示统计信息。

推荐方法:通过钩子自动加载

更推荐的做法是将性能监控函数挂载到 WordPress 的 wp_footer 钩子上,这样它会自动在页面底部加载。请确保您的主题模板文件(通常是 footer.php)中包含 <?php wp_footer(); ?> 调用。

functions.php 文件的性能函数定义之后,添加以下代码:

add_action( 'wp_footer', 'performance', 20 );

默认情况下,此方式会将统计信息输出为 HTML 注释。若需在前端显示,需要修改 performance 函数,将其默认参数改为 true,或者通过过滤器动态控制。

高级用法:动态控制显示

您可以通过以下改进,更灵活地控制输出:

// 改进版:可通过过滤器动态控制可见性
function performance_enhanced() {
    // 默认在管理后台前端显示,对访客隐藏(仅源码可见)
    $visible = apply_filters( 'show_performance_stats', current_user_can( 'manage_options' ) );
    $stat = sprintf(
        '%d queries in %.3f seconds, using %.2fMB memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
    );
    echo $visible ? '<div class="performance-stats">' . esc_html($stat) . '</div>' : "";
}
add_action( 'wp_footer', 'performance_enhanced', 20 );

此版本允许管理员在前端直接查看性能数据,而普通访客则看不到。您还可以通过添加 add_filter( 'show_performance_stats', '__return_true' ); 来为所有用户开启前端显示。

注意: 此功能主要用于开发和调试环境,在生产环境中建议关闭前端显示,或仅对管理员开放,以避免暴露不必要的系统信息。

发表评论

您的邮箱不会公开。必填项已用 * 标注。