Trae运行PHP慢的核心问题在PHP-FPM配置、OPcache未启用、静态资源误走PHP处理及upstream冗余;应改用Unix socket、调优OPcache参数、排除静态文件路由、禁用冗余扩展。
trae 运行 PHP 速度慢,核心问题通常不在 trae 本身,而是 PHP-FPM 配置、OPcache 启用状态、静态资源代理方式,以及 trae 的 upstream 转发链路是否冗余。
很多人以为慢是 trae 导致的,其实 trae 只是轻量反向代理(基于 Caddy),转发延迟通常 后端 php-fpm 处理耗时或未启用 opcache。
curl -w "@curl-format.txt" -o /dev/null -s http://localhost/your-script.php 查看 time_connect 和 time_starttransfer 差值 —— 若差值 > 200ms,说明 PHP 执行慢,不是 trae 转发慢php-fpm(绕过 trae):启动 php-fpm 并用 curl --unix-socket /var/run/php/php8.2-fpm.sock http:/
/localhost/status 测试,对比响应时间trae logs 看是否有大量 upstream timed out 或重试,这指向 PHP-FPM worker 不足或超时设置过短trae 默认不干预 PHP 配置,但本地开发若没开 opcache,每个请求都要重编译 PHP 文件,性能会断崖式下跌。
opcache.enable=1 和 opcache.enable_cli=0 在 php.ini 中已生效(运行 php -i | grep opcache 验证)php.ini):opcache.memory_consumption=128opcache.interned_strings_buffer=16opcache.max_accelerated_files=4000opcache.revalidate_freq=60(开发环境可设为 0,但别长期开着)opcache.fast_shutdown=1
opcache.validate_timestamps=0 用于开发——改代码不生效就是它在作怪trae 默认用 TCP 连接 PHP-FPM(如 127.0.0.1:9000),但 Unix socket 更快且无网络栈开销;同时默认超时太保守。
traefile.yml 中,把 upstream 改为 Unix socket:upstream: unix:/var/run/php/php8.2-fpm.sock(路径需与 php-fpm.conf 中 listen = 一致)timeout: 30smax_conns: 100keepalive: 30s
php-fpm 的 pm.max_children ≥ trae 的 max_conns,否则请求排队;开发机建议设为 20–50,别盲目调高trae 默认把所有 .php 请求都转给 PHP-FPM,但如果项目里混着大量 .js、.css、.png,又没配好静态文件路由,就可能误触发 PHP 解析(尤其 Laravel/Vue CLI 服务共存时)。
traefile.yml 的 routes 下明确排除静态资源:- match: [path_regexp:^/(.*\.(js|css|png|jpg|gif|svg|woff2?|ttf|eot))$] file_server: {root: ./public}
public/ 目录存在且权限可读;若用 Laravel,index.php 必须留在 public/ 内,别放在项目根目录xlswriter、imagick),它们会拖慢模块加载——用 php -m 检查,再用 phpdismod imagick 关闭最常被忽略的是:trae 本身不缓存 PHP 输出,也不处理 session 共享;如果你在本地反复刷新却看到不同响应时间,先盯住 opcache.revalidate_freq 和 php-fpm 的 slowlog,而不是调 trae 的 rewrite 规则。