项目运行慢的原因剖析

项目运行慢的原因剖析

背景

打开Chrome浏览器,输入url之后,其他页面显示都正常,但是当打开问题(暂且称为问题url)url的时候,服务器给回的响应特别慢。

剖析原因

前端原因

慢的原因很有可能是js文件或者css文件使用的cdn加速,但是有的cdn加速会特别慢,这就导致了使用cdn服务器的响应回的特别慢,导致浏览器给用户的响应就慢。所以打开F12调试窗口,查看如下:

会发现主要的时间都浪费在index的请求,点击进去会发现一个url延迟特别高。这就排除了前端原因了。

后台原因

找到对应的controller的url,然后发现对应的应该也没问题啊,取表中的数据,

将其拷贝到idea数据库的console进行搜索,

数据都是毫秒级别的,不可能这么慢。那问题到底在哪?

进入debug模式,然后单步执行

查看执行sql的debug模式:

会发现直接执行了应该执行的sql方法,其他下面我确实没写。直到后来,查看我的mapper的xml文件

其中这个BaseResultMap是映射集,他的映射集是这样写的。

<resultMap id="BaseResultMap" type="cn.tj.entity.Application">
    ....
    <result column="app_create_time" property="appCreateTime" jdbcType="DATE"/>
    <result column="app_interview_pass" property="appInterviewPass" jdbcType="VARCHAR"/>
    <result column="app_interview_time" property="appInterviewTime" jdbcType="DATE"/>
    <association property="user" column="user_id" select="cn.tj.mapper.UserMapper.selectByPrimaryKey"/>
</resultMap>

你会想问那为什么会出现TrainMapper的selectByPrimaryKey的sql呢,没错,就是在userMapper里面还有Train的引用。如下图:

<resultMap id="BaseResultMap" type="cn.tj.entity.User" >
  <id column="user_id" property="userId" jdbcType="INTEGER" />
  ...
  <result column="user_type" property="userType" jdbcType="VARCHAR" />
  <result column="user_apply_status" property="userApplyStatus" jdbcType="VARCHAR" />
  <result column="user_train_status" property="userTrainStatus" jdbcType="VARCHAR" />
  <association property="trainClass" column="user_highest_tclass_id" select="cn.tj.mapper.TrainClassMapper.selectByPrimaryKey" />
  <association property="train" column="user_highest_train_id" select="cn.tj.mapper.TrainMapper.selectByPrimaryKey" />
</resultMap>

这一下子就明白了吧,为什么每次打开这个页面有点慢,就是在mapper的时候,使用了association查询了其他类的sql,所以一下子就慢了。

解决

其实我也不想解决啊。但是没办法。肯定不用BaseResultMap,自己写一个mapper,然后将查询结果直接映射到自己的写的dto里面就行了。

原文地址:https://www.cnblogs.com/chenyameng/p/13283647.html