码迷,mamicode.com
首页 > 其他好文 > 详细

优化--后端(全站课)

时间:2018-07-31 23:27:19      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:空间   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!