Rails 网站效能 后端
前端效能是关注“整体”requests们的效能 而后端效能是关注“个体”request效能
就是单看每个request的执行速度
个别 HTTP Request 的反应时间在哪里看?
- 去
rails server
最后一行 有反应时间 - 或者用gem看 能看到各种细节
如何通过优化内存提升效能
先讲讲数据调用的过程
数据库会慢 因为数据库存在硬盘 调数据是从硬盘读出来 转成ruby object存在内存
原来“分页”的gem 是用来防止 Post.all
这类把全部数据都读取到内存的代码 会导致慢到爆炸的啊
find_each
这个技术是我一直隐隐困惑的 添加了新字段 里面是空的 如何一笔笔补具体数据进去
把数据库数据 切分成一千一千的数据去处理 就是每份数据size为一千. 比如,总体量为“一万”的数据量就会分十次去处理 这样就不是“遍历”十万 跟“分页显示”一个概念
Preload
的手法
这preload的手法 精彩在思路上 很受用 多感受一下 很赞的!
就是先把会用到的数据一次性全调出放内存 然后不同地方要用到“可能需要的全部数据”的一部分,那就用select
过滤出这个地方需要的部分。这样只需要去硬盘调一次,不用仅仅因为每个不同部分需要的数据不一 每次都再跑硬盘调
有个自己的小发现,用了preload的手法后,就算用count
也不会调用 SQL 语言哦!跟size
效果一样的 真是有趣!
count
与 size
两者区别
count
是从“硬盘”里调取数据 用SQL去调用
size
是已经调取放到内存里的数据 直接数组手法的总数 不是用SQL算
总之就是,去“内存”调数据比去“硬盘”调 效能高的多
想把 ActiveRecord 运用的得心应手 就要把
SQL
玩的溜
Instead of 把“全部post资料”从硬盘捞出来一股脑全放去内存 这样写SQL
去捞数据 最后仅从硬盘捞出10
笔数据放入内存
效能当然快太多了!
利用 SQL 让“数据库引擎”先运算好所需要的,按需从硬盘挑出目标放去内存,而不是一股脑全拖了丢去内存
原来
where
是用来查询的代码手法啊 就是在where里写查询条件的