一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?
项目从初次开发到现在,已经快3年了。期间,有N个工程师参与过。
需求方面:增加减少,反反复复,无数次;人力方面:增加减少,不稳定;时间方面:功能开发着急上线,Bug开发紧急修复。
因此,代码臃肿,问题颇多。
自从毕业加入到项目,深感代码质量问题对项目开发效率的影响,因此经常会对项目进行“重构”和“优化”。
主要经历了2次大的重构和无数次小的改进。
今天,特别整理下,希望今后可以做得更好。
重构事项
1.统一标准。
包、类、方法、字段等命名按照Java标准规范那样,统一命名。
2.重新组织代码。
a. 将项目代码,按照业务逻辑等原则,重新组织到不同的包中。
b. 按照一定的原则,调整类中的方法。
比如对于数据访问层Dao的方法,严格按照查询、增加、修改、删除这样的顺序组织。
而且,使用和修改频率高的代码,放在靠前的位置。
3.增加必要的注释。
对于那些业务比较复杂,容易混淆的代码,加上清晰简洁的注释。
4.删除无用的代码。
将废弃的功能代码,无用的注释,先用@Deprecated标记,过段时间,然后彻底删除。
5.提高代码复用。
Dao层:编写一个实现了常用CRUD功能的BaseDao。
工具层:对常用的工具代码,进行整理,统一到工具库中。
6.清理数据库。
a.将数据库中没有用到的表、字段全部删除。
b.优化表的数据类型。比如将longtext的字段,修改为varchar(20)。
c.规范化表和字段的命名。比如用户表用User,用户地址用userAddress表示。
同时,Java代码和实体配置文件,尽可能与数据库表相统一。
参考建议
更多重构和优化事项,不再赘述。
有兴趣的同学,可以看看《代码大全》、《重构》、《编写可读代码的艺术》这3本书。
重构有助于性能优化么
我只能说,有一定的帮助。
a.重复代码比较少,注释清晰,命名合理的代码,看起来“赏心悦目”。
本质上,不太可能提高系统性能,但是算得上是性能优化的准备工作。
项目重构后,开发更有效率,Bug更少,这样才可能有更多的时间去做性能优化。
b.去掉数据库表中无用的字段,这还是有点作用的。
至少,在SQL查询的时候,比如select *,会少查询一些字段。
见仁见智
重构是否有助于性能优化,是一个见仁见智的问题。
根据我有限的重构和优化经验,我只能说,“重构有助于优化性能,但作用有限”。
打个比喻,当你学画画,想要画一个苹果的时候,“把苹果洗干净”是否有助于你画出一个逼真的苹果呢?
“把苹果洗干净”就是代码重构的过程。
“画出一个逼真的苹果”就是性能优化的过程。
你是怎么看待这个问题的呢?愿闻其详...
相关阅读
原文参见:http://FansUnion.cn/articles/3109(小雷网-FansUnion.cn)
一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?的更多相关文章
- 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引
先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确
摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...
- 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)
在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...
- [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...
- 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- App架构师实践指南六之性能优化三
App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190 内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...
随机推荐
- MapReduce中combine、partition、shuffle的作用是什么
http://www.aboutyun.com/thread-8927-1-1.html Mapreduce在hadoop中是一个比較难以的概念.以下须要用心看,然后自己就能总结出来了. 概括: co ...
- 微软100题第51题:和为n连续正数序列
题目:输入一个正数n,输出全部和为n连续正数序列.比如输入15,因为1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. 方法一:记录序列长度.推断首项是否满足条 ...
- java学习记录笔记--继承,super,Object类
继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 ...
- springMVC之拦截器
有两种方法配置spring的拦截器 1. 实现接口: HandleInterceptor public class MyInterceptor1 implements HandlerIntercept ...
- hdu-2871
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- Struts2国际化-getText()方法
转自https://blog.csdn.net/qq_43560838/article/details/83747604 一:简单理解 国际化简称i18n,其来源是英文单词 international ...
- hive安装用mysql作为元数据库,mysql的设置
mysql的设置 在要作为元数据库的mysql服务器上建立hive数据库: #建立数据库 create database if not exists hive; #设置远程登录的权限 GRANT AL ...
- 用LinkedList模拟Stack功能
集合体系在Java中比较重要,整个集合体系是在JDK1.2版本后出现,Collection作为整个体系的顶层,拥有整个体系通用的功能.对于其下面的小弟,也是各有千秋.下面就一道面试题来看看Linked ...
- 链表python
无序链表.有序链表 有序列表排序通常是升序或降序,并且我们假设列表项具有已经定义的有意义的比较运算. 许多有序列表操作与无序列表的操作相同. 必须明确链表的第一项位置,一旦知道第一项. 链表实现的基本 ...
- 华为nova 4取代刘海屏
尽管首发被三星“截胡”,但华为依然是第一批发布“打孔屏”新机的厂商.官方已经确认,将于12月17日在长沙发布华为nova 4,主打自拍极点全面屏. 继真机谍照.配置曝光之后,今日华为官方发布一则华为n ...