老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
58

Discuz! 脚本执行时间调试

分类 网站技术/村民张先生 发布于 2025-11-07 14:36
0

Discuz! 自身的debug工具只显示脚本执行的总时间,无法显示该页面include的脚本的执行时间。可用下面的脚本来查看:

1、保存以下内容到 include_timer.php :

<?php
/**
 * PHP 5.6 全自动 include/require 计时器
 * 特性:
 * - 自动捕获所有被 include/require 的文件
 * - 第一条文件耗时正确
 * - 输出总耗时 + 每个文件耗时
 * - 无需修改其他文件
 */

$GLOBALS['_INCLUDE_TIMER'] = [
    'files' => [],
    'total' => 0,
    'last_time' => microtime(true),
    'initialized' => false,
];

// tick 事件,每条语句触发一次
declare(ticks=1);

register_tick_function(function() {
    static $lastFile = null;

    $includedFiles = get_included_files();
    foreach ($includedFiles as $file) {
        // 只处理第一次遇到的文件
        if (!isset($GLOBALS['_INCLUDE_TIMER']['files'][$file])) {

            $now = microtime(true);

            if (!$GLOBALS['_INCLUDE_TIMER']['initialized']) {
                // 第一条记录耗时设为0
                $diff = 0;
                $GLOBALS['_INCLUDE_TIMER']['initialized'] = true;
            } else {
                $diff = $now - $GLOBALS['_INCLUDE_TIMER']['last_time'];
            }

            $GLOBALS['_INCLUDE_TIMER']['files'][$file] = $diff;
            $GLOBALS['_INCLUDE_TIMER']['total'] += $diff;
            $GLOBALS['_INCLUDE_TIMER']['last_time'] = $now;
        }
    }
});

// 页面结束时输出
register_shutdown_function(function() {
    $files = $GLOBALS['_INCLUDE_TIMER']['files'];
    $totalTime = microtime(true) - $GLOBALS['_INCLUDE_TIMER']['last_time'];

    echo "<pre style='background:#111;color:#0f0;padding:10px;font-size:13px'>";
    echo "PHP Include Timer (PHP 5.6)\n";
    echo str_repeat('-', 60) . "\n";

    foreach ($files as $file => $time) {
        printf("%8.4f s  %s\n", $time, $file);
    }

    echo str_repeat('-', 60) . "\n";
    printf("Total include time: %.4f s\n", array_sum($files));
    printf("Total page execution time (approx): %.4f s\n", $totalTime);
    echo "<"."/pre>";
});

2、在入口文件引入上述文件,例如 forum.php 中(必须放在最前面):

declare(ticks=1);
include_once './include_timer.php';

3、暂时关闭PHP的 OPcache 等缓存扩展(重要),然后正常访问页面,底部会出现所包含的每个脚本及其执行时间。

欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20252466.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截