将文章内容从文章表拆分出去或查询文章列表时不附带查询文章内容
Created by: guqing
你当前使用的版本
1.4.15
描述一下此特性
动机
经过对 #1583 issue 的分析,当文章数量过多特别是文章都很长时会导致cpu飙升并且freemarker渲染速度过慢,非常占用资源。
描述
例如以2000
条文章字数都在8000
字的文章为例:
前置条件: 机器配置 2core 4g,且
halo
分配3g
内存
-
使用joe2对首页页面的请求需要5秒多,切换 h2 和 mysql 测试都一样
-
对于获取不使用分页查询的归档页面时需要20以上,并且请求未结束之前cpu都会飙升到90%多,直到请求结束才会恢复正常
根据以上情况进行反复测试,发现sql语句的执行时间都在可接受范围内。
此时将 2000
条文章的文章内容都清空后再试时,发现首页页面的请求降低到 300ms
, 归档页的页面请求降低到 900ms
归档页面请求过程中cpu占用率也从 90%
以上 降低到 20%
左右。
因此得出结论:查询文章列表数据时会连带查询出文章内容这样的大字段导致Post
对象变大, 堆积到内存中,况且归档页没有使用分页, 那么查询归档页时会将2000
条文章数据包括其内容查询到内存中, 导致计算量变大,因此cpu飙升,而这些情况文章内容都是无用的字段
综上所述,应该将文章内容从文章表中拆分出去以优化查询并减少无用大字段的存在时对象变量从而导致计算量上升。
附加信息
No response