今天测了一下,jbuilder 大约每一处 partial! 的渲染需要 100 ms 左右 例如:1 个 Plan 下面有 10 个 Days,每个 Days 下面又有 10 个 Events 渲染这个 Plan 花去了 20000 ms(20 秒)
这个是正常的吗?我现在不太敢使用 partial! 了,感觉每循环一次 partial! 就会耗损 100 ms,心疼
看请求日志,看是不是 n+1 查询的问题引起的,如果是,查询使用 includes
https://semaphoreci.com/blog/2017/08/09/faster-rails-eliminating-n-plus-one-queries.html https://guides.rubyonrails.org/active_record_querying.html#eager-loading-multiple-associations
之前在生产环境一个小 partial 用时是 0.1 ms,但是因为要调用 1000 次,算下里也要用 100ms,果断去掉了。楼主的 100 ms 是本地开发环境还是生产环境的数据? 如果是本地的,建议测一下 production 的情况。如果是 production 的,那多半不是 partial 的锅。
@cxh116 不是,就是 views,能清楚看到 Rendered api/v1/users/_user.json.jbuilder (0.3ms) Rendered api/v1/plans/index.json.jbuilder (1161.8ms) Completed 200 OK in 1688ms (Views: 1509.1ms | ActiveRecord: 6.0ms)
@coderliu 是本地的,单个小 partial 我这用时是 0.2 ~0.3 ms,我看 github 上有人提到是开发环境下的问题,但是在开发环境感觉也难受啊