代码review之 isInfoEnable()
上周没事扫扫系统原来的代码,突然发现这样一段代码:
if(log.isInfoEnable())
{
log.info("ID"+userID+"pwd"+userPwd);
}
因为之前写的日志类都是公司内部自己的日志类,对log4j用的并不多。当时看了这段代码觉得很奇怪,代码意思我是明白的,log本身就可以根据打印权限,判断当前是否打印呀,为什么专门要加上这样一条判断呢?后来查了一下,发现是由于性能方面考虑的。
如果直接写入这样一段话
log.info("ID"+userID+"pwd"+userPwd);
当打印等级为“info”之上时,系统并不会智能的跳过这句话,而是会进这句话的内部,那么进去之前第一件事,必定就是计算参数。
那么这里就会拼接字符串了。
一般来说,日志的打印等级越低,打印的内容就越详细(越趋于调试和跟踪代码),这时出现字符串拼接或者参数计算的东西就会越来越多,也就越耗费性能。此时如果我们设定当前的打印等级非常高,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )如ERROR等级,那么debug和info 级别的日志就不会打印,但是由于debug和info的打印语句非常多,组装参数所耗费的性能也就非常大,所以我们这时候把判断能否打印的语句放在外边先进行判断,虽然乍一看会觉得多此一举,其实当debug和info的日志越多时,越能节约无谓的性能开销。
很多网上很多人说这里不能为了代码的易读性而使用封装,因为在调用封装的方法时,其实已经开始计算参数了,反而显得很可笑,如下:
public void info(String msg)//当前msg其实已经是拼接后的字符串了
{
if(log.isInfoEnable())
{
log.info("ID"+userID+"pwd"+userPwd);
}
}
总结后的反思
1:很多人觉得,不封装就会破坏代码的易读性,很难看,如果封装了,又会起到反效果,所以压根就不要节约这点性能好了,将时间和精力放置在数据库连接查询,数据加载排序等等这些更耗费性能的事情上,其实我也是赞同的,我觉得做性能优化就要一层层的做,没必要从一开始就扣住所有细节,当然遵守一定的编码制度是很好的。但是倘若一开始就从所有 细节(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )着手,反而会影响其它重要的大的优化点。
2:对于这种写法上我个人想了一下觉得如下的写法既能保证代码的可读性,也能体现出这种判断的性能优势,但是会多出一个创建数组的性能开销
public void info(String... args)//使用可变参数
{
if(log.isInfoEnabled())
{
StringBuilder sb=new StringBuilder();
for (int i = 0; i < args.length; i++)
{
sb.append(args[i]);
}
log.info(sb.toString());
}
}
}
代码review之 isInfoEnable()的更多相关文章
- 部署代码review和CI
公司原先搭了一个代码Review的服务器,由于历史原因,装的是一个32bit的Ubuntu系统,后来由于需要,需要安装gitlab,由于gitlab需要64位系统,所以临时凑合了个vagrant,本质 ...
- 前端代码质量保障之代码review
经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ...
- 由学习《软件设计重构》所想到的代码review(一)
前言 对于一个程序猿来讲怎样来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我常常接触的一些程序猿来看,他们买了非常多技术重构类书籍.可是看完后代码编写能力并没有显著提 ...
- 对于近阶段公司代码 review 小结
来新公司,给公司的SDK review了一下.发现了不少小问题,在此总结一下. (我下面说明问题可能是很简单,但是搞清楚某些问题还是花了些时间的,大家引以为戒吧) 先谈谈处理的问题: 1.某天QA说有 ...
- 代码review的流程
以前我们一直都是如果要进行代码review的时候,要不我们就直接用idea来进行查看,根据不同的来查看 但是我们都是看代码的不同来进行来实现的,其实我们不需要这样,我们可以使用工具Phabricato ...
- 研发团队如何借助Gitlab来做代码review
代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ...
- Gitlab来做代码review
Gitlab来做代码review 代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现 ...
- 代码review
对于代码review个人也有些小小的看法: 1.首先我觉得我们所有开发人员要弄明白 现在Code Review 的目的 ,凡事不弄明白目的,无法做好完成一件事情,个人觉得有以下一些目的: a)可以在项 ...
- Gerrit代码Review实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
随机推荐
- 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP
经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...
- db2无法force掉备份连接的处理办法
在数据库在线备份的时候会与Load和ALTER TABLE <表名> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE发生冲突导致这两种操作被挂 ...
- jqgrid no url reset
如果发现 jqgrid 在运行中出现次错误,可能是以下原因 $('#@(ViewBag.tabcid + "_grid")').jqGrid('navGrid', '#@(View ...
- Select Option
jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change(function(){//code...}); //为Sele ...
- BSBuDeJie_03
一 快速登录 1 改变状态栏的style - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightConte ...
- C#的7个原则
C#的七个原则如下: 1.单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责. 2.开闭原则(Open-Closed Pri ...
- delphi URL 编码的转换
先介绍一下,Delphi中处理Google的URL编码解码,其中就会明白URL编码转换的方法的 从delphi的角度看Google(谷歌)URL编码解码方式 在网上搜索了一下,似乎没有什么关于goog ...
- virtualenv
问题:python开发过程中,需要安装各类依赖 逐个安装依赖,操作复杂,并可能会出现版本不一致的问题 解决:virtualenv可以有效解决上述问题 使用方法: 安装: pip install vir ...
- CodeIgniter(CI)框架中的验证码
在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...
- C# fun
C#中Func<T,TResult>的用法和Lambda表达式 代码片段: Func<int,string,string> t=(int x, string b) => ...