标签:空间 splay 优化 rail 数据库 app 报告 def back
rack-mini-profiler 这个 gem,可以永远显示网页的加载时间。(2300?)开发环境和产品环境都可以用。
(生成非常详细的报告)
以下服务可以收集网站实际营运的数据,找出哪些部分是效能不好的地方加以改善:
对后端来说,一个方向是提供 Rails 和 Ruby 代码的效能,一个方向是提供数据库方面的效能。
主要是query查询SQL的效能提升空间大。
1. 避免N + 1的query
includes():让你存取Post模型的关联对象user的属性,却不会产生额外的查询语句。用于简单的join的执行速度的改进。
可以嵌套,可以指定多个关系,可以附加where(具体看API)
对关联,可以使用:
def index
@posts = Post.includes(:user).page(params[:page])
end
SELECT "posts".* FROM "posts" LIMIT ? [["LIMIT", 2]]
SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 5)
def show
@post = Post.find(params[:id])
@comments = @post.comments.includes(:user)
end
多个关联,和加嵌套:
def index
@posts = Post.includes(:user, :liked_users, {:comments => :user}).page(params[:page])
end
{:comments => :user}是因为post关联comments,下一层comments关联了user。
<td><%= post.comments.map{ |c| c.user.display_name }%></td>
加上条件查询:
在开发时协助侦测 N+1 queries
gem https://github.com/flyerhzm/bullet (5500?)
标签:空间 splay 优化 rail 数据库 app 报告 def back
原文地址:https://www.cnblogs.com/chentianwei/p/9398380.html