执行drush cr后Drupal站点浏览器与cURL加载速度差异原因咨询
以下是核心原因:
请求处理范围不同
浏览器首次加载时,除了让Drupal生成页面HTML,还要触发前端资源(CSS/JS)的聚合、下载,甚至加载第三方脚本、字体等额外资源,这些都会大幅拉长总耗时。而服务器内的curl https://example.com只请求并获取HTML内容,不会触发前端资源的处理流程,Drupal只需要完成核心的页面缓存、块缓存、视图缓存等构建工作,所以耗时更短。缓存构建的优先级与完整性
drush cr清空所有缓存后,首次浏览器请求需要一次性构建全量缓存(页面缓存+前端资源缓存+动态内容缓存),甚至可能因为浏览器的并发请求导致缓存冲突(多个请求同时触发同一缓存生成),进一步增加等待时间。而curl预热是单一请求触发核心缓存构建,Drupal会把渲染好的HTML及必要的动态缓存全部生成并存储,后续浏览器请求直接读取已有缓存,无需重新构建,因此实现瞬间加载。网络与环境开销差异
浏览器请求需要经过公网传输,包含DNS解析、TCP握手、数据传输等额外开销,加上浏览器的资源加载策略(如并行加载时的阻塞),都会增加总耗时。而curl是服务器本地发起的请求,完全没有公网传输成本,只需要处理Drupal内部的缓存逻辑,所以能快速完成核心缓存的生成。Drupal缓存键与后台任务的影响
浏览器请求会附带大量HTTP头(如User-Agent、Accept-Encoding),可能导致Drupal生成不同的缓存键;而curl的请求头更简洁,生成的缓存能被后续浏览器请求复用(如果缓存配置忽略非关键请求头)。另外,首次请求可能触发Drupal的后台队列任务初始化,curl请求会在服务器端完成这些任务,后续浏览器请求无需再等待任务执行。
内容的提问来源于stack exchange,提问作者Tasos

