我的问题纯粹是基于 3 种方法的性能影响。我需要知道哪种方法是用于手头任务的最佳方法。
我需要为一组特定的记录渲染 json。
我目前使用的方法是
result = User.all.map{ |u| { name: u.name, id: u.id } }
如您所知,这将循环遍历 Activerecord 对象,这对于大量记录的性能非常低。
另一种方法是使用弹拨。
result = User.all.pluck(:name,:id).map{ |u| { name: u[0], id: u[1] } }
性能可能要好得多,但代码看起来很臭。
如果我们覆盖as_json,也可以用as_json实现相同的效果,因为仅包含必要的参数,但我需要知道这是否也会遍历 activerecord 对象。
随意说是否有任何其他方法可以提供更好的性能。
你可以只使用:
User.select(:id, :name).to_json
它可能不如您的pluck(...).map
版本那样性能,这确实是非常低级的。但它比您的all.map
版本更快,更优雅(又名更易于阅读)。
result = User.all.as_json(only: [:name, :id])