You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Localhost(XAMPP)响应过慢求助:未改配置却页面加载耗时久

页面加载缓慢问题排查与优化方案

问题背景

未修改XAMPP任何默认设置,启动Apache和MySQL后访问index.php页面,Chrome加载指示器需转动27秒才完成加载,后续加载耗时甚至达到34秒。页面核心功能为列出90张图片及相关详情,核心代码如下:

$absql = "SELECT * FROM `titles` ORDER BY date_created DESC LIMIT 90";
$result = $conn->query($absql);
// print_r($result);

if ($result->num_rows > 0) {
    // output data of each row
    while ($row1 = $result->fetch_assoc()) {
        $txtID[] = $row1['uniq'];
    }
}
// print_r($txtID);

$txtsToFind = implode(",", $txtID);
$get_title_txt = glob(__DIR__ . "/library/*/*{{$txtsToFind}}.txt", GLOB_BRACE);
//Then used each file above to display details

性能瓶颈分析

  1. glob函数的低效遍历:使用GLOB_BRACE匹配90个目标文件时,glob会递归遍历library下的所有子目录与文件,展开90个匹配规则后,遍历开销呈指数级增长,这是加载缓慢的核心原因。
  2. 数据库排序无索引:如果titles表的date_created字段未加索引,ORDER BY date_created DESC会触发全表扫描并排序,额外增加数据库查询耗时。
  3. 文件I/O累积开销:后续逐个读取txt文件的操作,若未做批量优化,会进一步累积加载时间。

优化方案

  • 给数据库字段添加索引:为date_created字段创建降序索引,加速排序查询:

    ALTER TABLE `titles` ADD INDEX `idx_date_created` (`date_created` DESC);
    

    若uniq字段是唯一标识,也建议为其添加索引,提升后续关联操作的效率。

  • 替换glob,直接构造文件路径:利用已知的uniq值,直接遍历子目录检查文件是否存在,避免glob的全目录扫描:

    $get_title_txt = [];
    $libraryDir = __DIR__ . "/library";
    // 获取library下的所有子目录
    $subDirs = array_diff(scandir($libraryDir), ['.', '..']);
    
    foreach ($txtID as $uniq) {
        foreach ($subDirs as $dir) {
            $filePath = "{$libraryDir}/{$dir}/{$uniq}.txt";
            if (file_exists($filePath)) {
                $get_title_txt[] = $filePath;
                break; // 找到目标文件后立即跳出循环,减少遍历次数
            }
        }
    }
    

    若子目录规则与数据库字段关联(比如titles表存了文件所在子目录),直接从数据库获取该字段值,可彻底省去子目录遍历步骤,直接构造准确路径。

  • 缓存文件路径结果:若文件不会频繁更新,可将查询到的文件路径缓存到数据库新增字段、本地缓存文件中,避免每次请求都重复遍历目录。

  • 优化文件读取流程:读取txt文件内容时,采用批量读取方式,或使用缓冲I/O函数(如file_get_contents()批量处理),减少磁盘I/O操作次数。

内容的提问来源于stack exchange,提问作者Bob D. Builder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:10:42