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

网站页面加载缓慢,服务提供者代码是否会引发N+1查询性能问题?

问题结论

这段代码会引发重复查询问题,不属于典型ORM关联场景的N+1查询,但本质和N+1一样属于重复执行SQL导致的性能损耗,是你页面加载缓慢的直接原因。

问题根因
  • 你使用了*通配符注册全局视图合成器,只要当前页面渲染了N个拆分视图(例如布局、侧边栏、内容区块、页脚等独立视图文件),合成器内的所有查询逻辑就会重复执行N次,Clockwork检测到的多余查询完全来源于此。
  • print页面场景下你分2次单独查询General表获取地址和电话信息,额外多产生1次无意义查询。
修复方案
  1. 解决视图合成器重复执行问题
    • 方案一(优先推荐):不要用*通配符注册全局合成器,仅给需要用到这些公共变量的顶层布局视图注册合成器,避免子视图渲染时重复触发逻辑。
    • 方案二:使用Laravel请求级单次缓存功能包裹所有查询逻辑,Laravel 9及以上版本可直接用once()辅助函数,保证单次请求内同一段查询逻辑只会执行一次,示例如下:
      // 以logo查询为例
      $logo = once(fn () => General::where('type', 'logo')->first());
      // 其余订单查询、General表查询都按相同方式用once包裹即可
      
  2. 优化General表重复查询
    print页面的2次单独查询合并为1次批量查询,减少SQL执行次数:
    $generalData = General::whereIn('type', ['alamat', 'telepon'])->pluck('content', 'type');
    $alamat = $generalData['alamat'] ?? '';
    $telepon = $generalData['telepon'] ?? '';
    
  3. 可选优化:提前计算一次当前URL的判断结果,避免多次重复执行strpos判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:18:03