登陆时间的优化

登陆时间的优化

image-20230108133750732

这是一个登陆的请求,在项目启动后首次调用,耗时近800ms,而第二次调用改接口时则只花费了29ms,性能有较大的提升空间。

下面针对此问题进行一系列的优化。

耗时排查

image-20230108134323391

项目启动后清空日志,然后调用接口,发现会创建一个dispatcherServlet,耗时4ms,又根据日志实际打印的时间发现,实际耗时近200ms

image-20230108144344504

数据库初始化以及链接耗时近400ms,存在很大优化空间 。

image-20230108155010289

业务执行第一次耗时也非常久。

优化

1、启动时自动执行Initializing

在spring boot load-on-startup默认值是-1,项目启动时,默认不会初始化DispatcherServlet,也就是不会调用Servlet接口的init()方法

在yml配置文件中进行如下配置,即可指定启动时初始化:

1spring: 2 servlet: 3 load-on-startup: 1 # 启动的时候初始化DispatcherServlet

2、数据库优化

1hikari: 2 minimum-idle: 10 # 池中维护的最小空闲连接数 3 connection-test-query: SELECT 1

image-20230108161625514

在如上两步操作后,发现性能得到了部分优化,但还是达不到理想的效果

经过检查,在如上配置后数据库并没有初始化。

3、项目启动优化

创建类InitRunner 继承ApplicationRunner

ApplicationRunner是一个接口,常用于项目启动后,(也就是ApringApplication.run()执行结束),立马执行某些逻辑。

可用于项目的准备工作,比如加载配置文件,加载执行流,定时任务等等。

1@Component 2@Slf4j 3public class InitRunner implements ApplicationRunner { 4 5 @Resource 6 private IUserService userService; 7 8 @Override 9 public void run(ApplicationArguments args) throws Exception { 10 ThreadUtil.execAsync(() -> { 11 try { 12 userService.getById(1); // 数据库探测,帮我在项目启动的时候查询一次数据库,防止数据库的懒加载 13 log.info("启动项目web请求查询成功"); // 发送一次异步的web请求,来初始化 tomcat连接 14 HttpUtil.get("http://localhost:9090/"); 15 log.info("启动项目tomcat连接查询成功"); // 发送一次异步的web请求,来初始化 tomcat连接 16 } catch (Exception e) { 17 log.warn("启动优化失败", e); 18 } 19 }); 20 } 21}

image-20230108171954445

image-20230108172012324

再次测试发现,前端网络请求共耗时418ms,后端方法执行则耗费了256ms,那么 中间还有150ms发生了什么呢?将日志打印级别修改为debug

image-20230108174354039

image-20230108174414330

查看日志发现是tomcat占用了较多时间

于是在项目初始化的时候就调用http请求,以完成tomcat初始化

1@Component 2@Slf4j 3public class InitRunner implements ApplicationRunner { 4 5 @Resource 6 private IUserService userService; 7 8 @Override 9 public void run(ApplicationArguments args) throws Exception { 10 ThreadUtil.execAsync(() -> { 11 try { 12 userService.getById(1); // 数据库探测,帮我在项目启动的时候查询一次数据库,防止数据库的懒加载 13 log.info("启动项目web请求查询成功"); // 发送一次异步的web请求,来初始化 tomcat连接 14 HttpUtil.get("http://localhost:9090/"); 15 log.info("启动项目tomcat连接查询成功"); // 发送一次异步的web请求,来初始化 tomcat连接 16 } catch (Exception e) { 17 log.warn("启动优化失败", e); 18 } 19 }); 20 } 21 22}

image-20230108175127982

测试后,优化完成。

点赞
收藏

评论区

加载中...

相关推荐

Cmder启动速度优化

为加快cmder启动,我们可以做一些简单优化,减少环境变量检测和批处理调用操作优化前启动时间:1.69秒优化后启动时间:0.53秒1\.将cmder下批处理中lib\_console输出禁用    

RTSP拉流协议视频平台多点认证造成潜在威胁?如何破解?

上一篇我们讲了TSINGSEE青犀视频平台EasyNVR内登陆鉴权的优化,通过优化登陆鉴权,我们可以抵御很多分发用户的攻击。在该问题优化完成后,我们模拟不法分子的攻击对EasyNVR的安全性进行了测试,EasyNVR已经达到了一个安全性很高的级别。!203.png(https://imgblog.csdnimg.cn/img_convert/937

Shiro 放行Swagger

一、前言在使用SpringBootShiroMybatisSwagger开发后台权限管理系统的时候,由于SpringBoot采用了Shiro框架,同时API接口文档使用的Swagger,遇到一个问题,在SpringBoot集成Shiro后,访问Swagger接口需要登陆才可以,由于在项目成型之前需要做接口测试,所以这里记录下如何在Shi

Spring AOP 切面编程记录日志和接口执行时间

最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx、tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统的响应时间特别长。知道了问题之后,就需要对查询比较慢的接口进行优化,但哪些接口需要优化、哪些不需要呢?只能通过日志里的执行时间来判断,那么如何才能知道每一个接口的执行时间呢

提供方耗时正常,调用方毛刺频频

作者:京东零售王森一现象调用方AJSF提供方B大多数情况下,调用方耗时和提供方耗时基本没有差别个别情况下,调用方耗时远高于提供方耗时,大概5分钟20次1.调用方A耗时如下图2.提供方B耗时如下图3.调用方监控添加在调用JSF接口前后加的监控,没有其他任何

提供方耗时正常,调用方毛刺频频

作者:京东零售王森一现象调用方AJSF提供方B大多数情况下,调用方耗时和提供方耗时基本没有差别个别情况下,调用方耗时远高于提供方耗时,大概5分钟20次1.调用方A耗时如下图2.提供方B耗时如下图3.调用方监控添加在调用JSF接口前后加的监控,没有其他任何