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

WordPress中admin-ajax工作机制及请求阻塞问题咨询

WordPress admin-ajax 请求排队问题解答

为什么同一浏览器多标签页的请求耗时逐次增加?

是的,你观察到的现象确实源于同一登录用户的admin-ajax请求会被串行处理,核心原因是PHP的会话锁机制:

  • WordPress默认采用PHP文件会话存储,用户登录后,每个admin-ajax请求都会加载用户会话,此时PHP会对会话文件加排他锁,直到请求执行完成才释放锁。
  • 同一浏览器的多个标签页属于同一用户会话,后续请求必须等待前一个请求释放会话锁才能启动,所以标签页2要等标签页1的2秒请求完成,标签页3要等标签页2的请求结束,最终呈现耗时逐次累加的情况。

多用户场景下会出现累计等待吗?

不会。不同用户拥有独立的会话文件,会话锁仅针对单个用户的会话资源生效,彼此之间没有关联。第10位用户的请求会被独立处理,无需等待前面9位用户的请求完成,他的请求耗时仍为正常的2秒左右,不会出现累计20秒的情况。

解决同一用户多请求排队的方案

  • 尽早释放会话锁:在admin-ajax的处理逻辑开头,完成会话验证、数据读取等必要操作后,立即调用session_write_close()释放会话锁,让后续请求可以并行执行,无需等待当前请求完成。
  • 更换会话存储方式:改用Redis、Memcached等内存型会话存储,这类存储的锁机制并非排他性的,支持同一用户的多个请求并行处理。
  • 异步处理耗时操作:将插入数据库、复杂计算这类耗时操作从admin-ajax请求中剥离,改用WP Cron或消息队列异步执行,缩短单个请求的执行时间,降低排队等待的影响。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:52:02