关于代码效率提升的方法心路历程(购物车)

关于代码效率提升的方法心路历程(购物车)

给为园友们,大家好,最近一直解决执行提速,分析老代码的逻辑并提出优化方案,在这个过程中发现了很多不好的习惯,导致很多程序逻辑执行效率低下,现在将其总结一下,如果大家觉得有参考意义,就看一下,如果觉得有问题,多多指点,如果觉得写的不好,也勿喷,谢谢!

案例分析:

关于购物车效率的提升,在优化前,购物车需要3-5分钟才能够查询出来数据,并且购物所有商品全部刷新重新渲染。这个购物车计算价格的代码还是一个工作20年左右的前辈写的,并且找了很久的优化方案(只局限在自己的接口代码逻辑),觉得逻辑已经不能在优化了。对此,我将整理执行逻辑分析了一下,发现有很大的提升空间,下面的是我一个分析逻辑:

我分析了一下现在购物的代码调用执行逻辑

1、初始化购物车时,购物车全商品渲染(获取商品、获取优惠券等)(没问题)

2、购物车商品增减操作步骤

2.1:调用独立接口只更新对应的商品数量

2.2:数量更新后,在按照初始化购物的逻辑一样

重新获取数据渲染页面

3、后端接口计算价格逻辑

3.1:获取根据用户获取购物车商品

3.2:遍历每一个商品计算对应的价格

3.2.1:获取该商品的价格因子数据

3.2.2:根据商品查询最近的配送仓库

3.3:其他业务逻辑处理

这样下来,一个商品的价格计算完成,都是需要调用10次左右的数据库

购物车商品数量越多,数据库操作次数是成倍数增加

其实,经验好一点的同学,一看就知道里面的问题所在

我给出的优化方案从两个点出发,其一、前后端数据交互上改进;其二、接口计算价格逻辑改进,具体如下:

其一、前后端数据交互上改进

减少不必要的数据交互方式,具体体现在:

a、购物车商品数量发送改变时,不在整体渲染购物车列表

b、购物车商品数量发送改变时,去掉不必要的接口调用

c、最终数量改变,只调用一个接口搞定,接口的具体功能是:

c1:对该用户的该商品的购物车数据做加减

C2:如果操作成功,那么重新计算该商品对应的店铺的购物车商品价格数据,并返回前端,前端只渲染处理该店铺的商品数据即可

其二、后端计算价格逻辑改造

改造简单思路是:想获取所有数据集合,具体的数据组装加工放在内存中加工,这样减少数据库操作,

a:获取根据用户获取购物车商品

如果是更新购物车数量计算价格,需要加一个店铺限制条件

b:根据获取到的所有商品,批量获取影响这一些商品的价格因子集合

c:根据获取到的所有商品,批量获取对应的店铺的仓库消息集合

d:遍历商品

根据获取到价格因子,计算价格

根据获取到的仓库消息,计算最近的仓库配置地

优化后的结果:

1、初始化购物车40个商品也就只需要1S不到

2、商品加减操作,响应速度毫秒级

为了让整方案能够实施起来,也是提了几次建议,最后才接收采纳,现在想来不容易啊,自己都不知道为什么执行起来这么曲折。

当然,目前的效果,也还有优化提升的空间,我也给了一下建议

1、可以加上一些缓存机制,比如服务端对用户购物车数据缓存5分钟

对于大部分用户来说,在购物车操作一次数据不会等待5分钟

这样还能进一步提高效率

2、价格计算可以放到前端计算,这而可以加一下策略机制

比如在购物车页面停留达到一定时间,前端重新取一次最新的价格因子等信息

为什么说,可以将价格计算在前端算,我个人理解,在购物车的价格只是一个展示,并不是用户的最终购物价格,最终价格都是在结算页面下单时计算为准。即使价格每次采用后端计算,那么用户在结算的时候,也不一定就是购物车展示的价格,因为,在用户在购物车停留期间,也有可能后台价格因子发改变,到账到结算页面的最终价格与购物车价格不一致。

小结

通过上面的购物车改进案例分析,总结如下:

1、在优化某一功能时,一定要站在全局去剖析问题

2、在具体的优化点上,一定要考虑分析问题的瓶颈点,

找到最优的解决办法,而不是只是把功能实现就完事了

多问一个为什么要这样处理?还有最优的策略吗?

不然,我们和初级程序员有什么优势呢?

3、多给自己充电,积累经验,这样才能够找到合理的方法

要善于接受新的事物,不然自己就会慢慢的跟不上节奏。

原文地址:https://www.cnblogs.com/xiaoXuZhi/p/code_optimization.html

时间: 2024-10-09 01:36:16

关于代码效率提升的方法心路历程(购物车)的相关文章

十条jQuery代码片段助力Web开发效率提升

JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器.jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用).events.实现动画效果,并且方便地为网站提供AJAX交互.jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有

从一个程序员到一个销售高手的心路历程

从一个程序员到一个销售高手的心路历程 0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为“搬砖头”,因为我们所做的事跟民工搬砖头砌墙本质上是相同的,我们也是把一堆代码从 一个地方搬到另一个地方,然后改改让它面子上看起来挺好看,用起来结实耐用就算完工了. 干了6年的技术以后,我放弃了已做的非常 好的技术和积累起来的成绩,转而从0开始去做销售.后来经过自己的努力,我终于成长为一个销售和业绩翻倍高手,在销售和业绩翻倍方面取得

VS2012+EF6+Mysql配置心路历程

原文:VS2012+EF6+Mysql配置心路历程 为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的开发环境是Win7+VS2012,数据库环境是Ubuntu12.04+MySQL+Mono+Jexus 计划开发完后整个运行在Linux下. 1.下载MySQL Connector/Net 6.8.3 地址:http://dev.mysql.com

java代码效率优化

[转载于http://blog.163.com/user_zhaopeng/blog/static/16602270820122105731329/] 1. 尽量指定类的final修饰符 带有final修饰符的类是不可派生的. 如果指定一个类为final,则该类所有的方法都是final.Java编译器会寻找机会内联(inline)所有的 final方法(这和具体的编译器实现有关).此举能够使性能平均提高50% . 2. 尽量重用对象. 特别是String 对象的使用中,出现字符串连接情况时应用S

最近的心路历程非常之多

1.<老王和他的IT界朋友>能给我们带来什么 最近的心路历程非常之多,每次到了每年的这个时候,我总喜欢停下来,好好写写东西,感觉越来越力不从心.看到之前写的东西,总是很惊讶那样的文字也会出自我手. 最近姥爷有点身体不适,我推着他跑了跑医院,这才知道我们每个人其实都不是自己所想象的那样,并不是自己所想象的那样健康,我想做一个公众号,或者说一个订阅号,默默的记录我们身边的IT界人的心路历程,希望透过我们并不是很幼稚的文字记录自己的成长,同时给予其他看到这些文字的人 ,看到这些文字的攻城狮,程序员.

VS2013+EF6.1+Mysql配置心路历程

为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的开发环境是Win8+VS2013,数据库环境是MySQL(WampServer) 1.下载MySQL Connector/Net 6.8.3 地址:http://dev.mysql.com/downloads/connector/net/ 还需要下载一个MySQL  for VisualStudio

围绕效率提升,测试可以做什么?

大部分的研发经理心中,进度是第一位的,其次是成本,最后是质量,当然人员队伍最好稳定.天下武功,唯快不破:进度 > 成本 > 质量 > 人. 围绕效率提升,测试可以做什么?你脑海里跳出来的,应该是"自动化"或者"敏捷"吧,没错,自动化和敏捷都可以帮助提升研发效率,但是并不是只要做了都有这个作用. 下面来看看测试支持效率提升的不同段位. 一段:提升测试效率. 提升测试的效率,最有效的手段是制定测试策略.对,你没有看错,是测试策略而不是自动化! 测试策略

顶级项目孵化的故事系列——Kylin的心路历程【转】

现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache 基金会牢牢的巩固了自己的位置.作为本土第一个进入到世界顶级基金会的项目,Kylin 的经验是值得大家学习的. 以下内容根据 COSCon'17讲师史少锋(Apache Kylin PMC&Committer .Kyligence 技术合伙人兼高级架构师)的演讲速记所整理. 演讲实录 今天我主要介绍

理解CPU分支预测,提高代码效率

摘要: 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也会体现在优秀程序员在工作效率提升.产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力. 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也会体现在优秀程序员在工作效率提升.产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力. 从本期开始,我们将邀请来自阿里巴巴各个技术团队的程序员,涵盖中间件.前端.移动开发.