项目运行慢的原因剖析
項(xiàng)目運(yùn)行慢的原因剖析
背景
打開(kāi)Chrome瀏覽器,輸入url之后,其他頁(yè)面顯示都正常,但是當(dāng)打開(kāi)問(wèn)題(暫且稱(chēng)為問(wèn)題url)url的時(shí)候,服務(wù)器給回的響應(yīng)特別慢。
剖析原因
前端原因
慢的原因很有可能是js文件或者css文件使用的cdn加速,但是有的cdn加速會(huì)特別慢,這就導(dǎo)致了使用cdn服務(wù)器的響應(yīng)回的特別慢,導(dǎo)致瀏覽器給用戶(hù)的響應(yīng)就慢。所以打開(kāi)F12調(diào)試窗口,查看如下:
會(huì)發(fā)現(xiàn)主要的時(shí)間都浪費(fèi)在index的請(qǐng)求,點(diǎn)擊進(jìn)去會(huì)發(fā)現(xiàn)一個(gè)url延遲特別高。這就排除了前端原因了。
后臺(tái)原因
找到對(duì)應(yīng)的controller的url,然后發(fā)現(xiàn)對(duì)應(yīng)的應(yīng)該也沒(méi)問(wèn)題啊,取表中的數(shù)據(jù),
將其拷貝到idea數(shù)據(jù)庫(kù)的console進(jìn)行搜索,
數(shù)據(jù)都是毫秒級(jí)別的,不可能這么慢。那問(wèn)題到底在哪?
進(jìn)入debug模式,然后單步執(zhí)行
查看執(zhí)行sql的debug模式:
會(huì)發(fā)現(xiàn)直接執(zhí)行了應(yīng)該執(zhí)行的sql方法,其他下面我確實(shí)沒(méi)寫(xiě)。直到后來(lái),查看我的mapper的xml文件
其中這個(gè)BaseResultMap是映射集,他的映射集是這樣寫(xiě)的。
<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>
你會(huì)想問(wèn)那為什么會(huì)出現(xiàn)TrainMapper的selectByPrimaryKey的sql呢,沒(méi)錯(cuò),就是在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>
這一下子就明白了吧,為什么每次打開(kāi)這個(gè)頁(yè)面有點(diǎn)慢,就是在mapper的時(shí)候,使用了association查詢(xún)了其他類(lèi)的sql,所以一下子就慢了。
解決
其實(shí)我也不想解決啊。但是沒(méi)辦法。肯定不用BaseResultMap,自己寫(xiě)一個(gè)mapper,然后將查詢(xún)結(jié)果直接映射到自己的寫(xiě)的dto里面就行了。
總結(jié)
以上是生活随笔為你收集整理的项目运行慢的原因剖析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python chr() 函数
- 下一篇: keepalived的配置解析&