美文网首页
2018-08-13-加速提早加载 和 计数缓存

2018-08-13-加速提早加载 和 计数缓存

作者: 护念 | 来源:发表于2018-08-13 22:07 被阅读0次

includes 提早加载

提早加载是为了解决n + 1 查询问题:
问题描述:

一个作者,有许多本书,这是一个一对多的关系;当我们一次性取出,所有作者,然后遍历作者,并取出它们的书,这时就会查询n + 1 次。

authors = Author.all

authors.each do |author|
  puts author.books.size
end
image.png
解决办法:其实挺简单,用includes 方法就好。
authors = Author.includes(:books).all
效果
image.png

counter_cache 计数缓存

问题描述:

一篇文章,有多个评论。一对多的关系,我需要知道每篇文章的评论数,就必须通过关联,article.comments.length 去查询。
这也比较慢,计数缓存的解决办法是,把评论数缓存到articles表中,每次新增评论,rails 会自动去更新articles 中的 计数字段(comments_count)
用法:

class Article < ApplicationRecord
  has_many :comments
end

class comments < ApplicationRecord
  belongs_to :article, counter_cache: true # 这里打开
end
# artilces 中新增 计数字段
add_column :articles, :comments_count, :integer,default: 0,null: false

PS: 字段名:另一张表名_count

相关文章

  • 2018-08-13-加速提早加载 和 计数缓存

    includes 提早加载 提早加载是为了解决n + 1 查询问题:问题描述: 一个作者,有许多本书,这是一个一对...

  • web站点网速优化

    1。后台优化,启用页面缓存 2。dns域名解析加速 3。使用cdn加速 4。采用多台服务器提高并行加载量,例如负载...

  • 微信页面入口文件被缓存解决方案

    缓存对于前端页面来说,是加速页面加载的利器之一,但也同时带来了很多问题,比如新版本发布之后,怎么替换客户端上的缓存...

  • 微信页面入口文件被缓存解决方案

    缓存对于前端页面来说,是加速页面加载的利器之一,但也同时带来了很多问题,比如新版本发布之后,怎么替换客户端上的缓存...

  • io

    BufferedInputString(有缓存的FileInputStream)加速 缓存

  • glide缓存无法更新

    问题 使用glide加载图片,glide有缓存,分为内存缓存和磁盘缓存,可以通过diskCacheStrategy...

  • 缓存的设计和使用

    缓存的设计和使用 1、缓存的收益与成本收益1、加速读写:通过缓存加速读写速度:CPU L1/L2/L3 Cache...

  • 自定义图片框架实现图片三级缓存

    什么是三级缓存 网络缓存, 不优先加载, 速度慢,浪费流量本地缓存, 次优先加载, 速度快内存缓存, 优先加载, ...

  • Android 中图片的三级缓存策略

    什么是三级缓存? 内存缓存,优先加载,速度最快 本地缓存,次优先加载,速度快 网络缓存,最后加载,速度慢,浪费流量...

  • URL

    URL加载系统:缓存、Cookies与协议 缓存: URL为请求提供了基于磁盘缓存和内存缓存,缓存减少了应用对网络...

网友评论

      本文标题:2018-08-13-加速提早加载 和 计数缓存

      本文链接:https://www.haomeiwen.com/subject/xcjpbftx.html