概括总结
在电商下单时,一般都需要选择收货地址。这时候,在页面显示的信息已经包含手机号、姓名、详细地址、地址ID等信息了。那么这时候可以有两种选择,1、只把地址ID作为参数传过去,后台根据ID重新查询地址对象,对对象中获取详细信息; 2、把手机号、姓名、详细地址作为参数传过去,后台不需要查询数据库,直接使用前台传来的参数。
这两种方式的性能差异是:“传参” 比 “根据ID查询” 性能好3.65%。
015版本更新说明
Version015QueryAddr.java:把地址ID作为参数,通过地址ID查询数据库,获取地址信息。
Version015ParamAddr.java:把手机号、姓名、详细地址作为参数传过去,后台不需要查询数据库,直接使用前台传来的参数。
测试结果
统计10次测试的平均值之后:
Version015QueryAddr 提交每个订单平均耗时的纳秒数: 4272820
Version015ParamAddr 提交每个订单平均耗时的纳秒数: 4122186
Version015QueryAddr 每秒钟可以提交的订单数: 235
Version015ParamAddr 每秒钟可以提交的订单数: 242
性能差别为:(4272820 - 4122186) / 4122186 * 100% = 3.65%,即 “传参” 比 “根据ID查询” 性能好3.65%。
【备注】:不同的机器上的测试结果会不一样,以上测试结果仅供参考。
测试结果说明
从理论上来说,少了一次数据库查询,性能当然会好一些。这次测试的目的不是为了证明它好,而是为了测试到底好多少,是否值这么做。
3.65%并不是一个很大的数值,一般来说我对于低于5%的性能提升不是特别敏感,毕竟测试结果跟运行环境有关,有个百分之几的出入是经常的事。但是我还是会保留这一版本,即以后版本的代码中,地址信息都会以参数的方式传过去,不查询数据库了。理由是:虽然3.65%不多,但是下次如果把用户信息或者商品信息缓存起来,就又可以少查询一两次数据库了,这样累加起来,性能提升就比较可观了。
源码