1.问题的引出
在Web应用的使用过程中经常会出现某个页面加载缓慢或者崩溃的情况,给用户造成很不好的使用体验,本文注重介绍进行页面优化的一些思路及长使用的工具对于具体工具的使用不做具体展开,大家可以网上自行搜索对应工具的教程进行学习。
2.优化的思路
1.页面加载:分析页面资源的加载信息,优化耗时较大的资源的加载
2.应用层:分析方法的执行执行时间,优化耗时比较大的方法
3.缓存:Mybatis/hibernate的二级缓存、常用数据的预加载及redis缓存
4.DB层:分析慢SQL的执行计划并优化、分库分表策略、读写分离
5.服务器硬件:网络带宽、服务器内存cup的升级
3.优化方法及所用工具
3.1 页面加载分析
1.使用Chrome浏览器进入开发者工具,打开network面板可看到如下信息:
2.使用gtmetrix在线网页性能测试工具
3.2 应用层分析
应用层分析主要注重对类中的方法进行时间复杂度和空间复杂度分析,确定执行比较慢的方法和占用内存比较大的方法进行优化。
1.使用system.currenttime()记录方法执行前后的时间作差
startTime=System.currenttimemillis(); execute Method(); endTime =System.currenttimemillis(); method execute time = startTime - endTime;
2.使用Spring中的StopWatch进行统计
StopWatch sw= new StopWatch(); sw.start(methodname1); method1(); sw.stop(); sw.start(methodname2); method2(); sw.stop(); sw.prettyPrint(); //格式化输出 sw.getTotalTimeMillis();//获取方法执行总时间 sw.getLastTaskName();//获取最后一个方法名 sw.getLastTaskInfo();//获取最后一个方法信息 sw.getTaskCount();//获取方法总数
3.使用jprofiler进行分析
Java性能分析神器,关于JProfile相关知识请参考:Java性能分析神器-JProfiler详解
4.使用Btrace进行分析
5.在项目中配置druid数据源开启druid监控
1.引入druid相关Jar包
2.配置druid数据源
3.开启监控
>
3.3 缓存
Ehcache:在JVM中缓存,速度快、效率高但共享复杂不适用于缓存恢复、大数据缓存场景。
Redis:效率: ehcache > redis > 数据库 ,redis适用于缓存数据量大、分布式、缓存共享的场景。
3.4 DB层
主要分析SQL语句的执行计划,优化SQL语句。
1.oracle数据库
explain plan for SQL语句;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
查看SQL语句的执行计划(或者PL/SQL中直接按F5)
Oralce explain plan for 示例:
2.MySQL数据库
explain SQL语句;
mysql explain示例:
3.5 服务器硬件
主要测试网络的带宽、服务器内存的大小、CPU的运算速度等
4.优化步骤
1.配置应用监测工具
2.当前性能情况
3.分析页面加载缓慢项,确定优化点
4.分析慢方法
5.分析慢SQL
6.应用层优化
7.DB层优化
8.硬件优化
9.优化效果分析