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

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

案例分析:

  关于购物车效率的提升,在优化前,购物车需要3-5秒才能够查询出来数据,并且购物所有商品全部刷新重新渲染。对此,我将整理执行逻辑分析了一下,发现有很大的提升空间,下面的是我一个分析逻辑:

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

  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:遍历商品

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

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

优化后的结果:

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

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

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

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

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

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

    这样还能进一步提高效率

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

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

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

小结

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/xiaoXuZhi/p/code_optimization.html

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

  1. mysql source导入大数据量时效率提升的方法

    在对mysql数据库进行大数据量导入时,我通常是选择source命令进行导入,这样能比较短的时间内导入.但是,如果数据量大到一定量级时,即使是用source命令,效率也并不高.比如此次要导入的数据库文 ...

  2. 一个分号将代码效率提升100倍

    2019独角兽企业重金招聘Python工程师标准>>> 我的做PHP的,近来突发奇想,想比较做同样的事情PHP和C的效率差异.所以写了两段简单的测试代码,因为对C的了解不是太深,所以 ...

  3. 共产主义描述和资本论效率提升过程合理性的疑问(马克思恩格斯选集读后感)

    最近读了马恩科斯选集,发现马克思恩格斯对共产主义的具体构建细节描述甚少.包括空想社会主义到科学社会主义的描述到最后描述共产主义的时候也只是提了几条原则:说1.无产阶级夺取政权,消灭资产阶级,从而自己的 ...

  4. 效率提升3倍的Paper阅读方法

    视频链接:https://www.bilibili.com/video/BV1Q4411R7cY 效率提升3倍的Paper阅读方法 1 为什么要读论文 构建知识体系 紧跟前沿技术 培养科研逻辑 写论文 ...

  5. 嵌入式编程C语言提高代码效率的14种方法

    嵌入式编程C语言提高代码效率的14种方法 1.在可能的情况下使用typedef替代define.当然有时候你无法避免define,但是typedef更好. typedef int* INT_PTR; ...

  6. 【杂谈】提升写代码效率不得不做的三件事

    想成为一个优秀的AI算法工程师必须要熟练使用Linux,这是学习AI的一个基础,如果你一直还在用Windows,那就很low了.本文我们聊聊提升写代码效率不得不做的三件事. 作者&编辑 | 汤 ...

  7. 注重代码效率_如何提升质量:注重态度

    注重代码效率 by Harshdeep S Jawanda 通过Harshdeep S Jawanda 如何提升质量:注重态度 (How to skyrocket quality: focus on ...

  8. jquery html 片段,十条jQuery代码片段助力Web开发效率提升

    JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...

  9. C语言提高代码效率的几种方法

    一段完美的代码不仅在于找到一个给定的问题的解决方案,但在它的简单性,有效性,紧凑性和效率(内存).设计的代码比实际执行更难.因此,每一个程序员当用C语言开发时,都应该保持这些基本的东西在头脑中.本文向 ...

最新文章

  1. python基础 while循环练习
  2. JavaNIO - AbstractInterruptibleChannel
  3. python flask 设置个性化的响应体 响应头 状态码
  4. MySQL 中ANALYZE [LOCAL NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
  5. javaScript学习笔记之类型转换
  6. 3t硬盘坏道检测需要多久_卤素检测报告需要多久更新一次
  7. HTML荧光文字动态效果,html – 在CSS中的笔荧光笔效果
  8. VSCode Debug
  9. 200+页综述!阐述大规模预训练模型机遇与风险
  10. Object常用方法
  11. javascript学习之数组的使用一 push pop shift unshift 方法
  12. unity 实现手机振动_unity 调用android的震动
  13. markdown新手入门使用指南
  14. c语言输出英文字母表,菜鸟求助,写一个随机输出26个英文字母的程序
  15. 51单片机之实时秒表
  16. asp.net调用51ditu
  17. 防雷工程专业术语及雷电浪涌保护器名词解释
  18. 浪潮 服务器 修改raid,浪潮服务器RAID配置方法-20210723233916.docx-原创力文档
  19. dau、mau、pcu、dnu、wau、acu、uv的意思是什么?
  20. MATLAB大小写字符的转换

热门文章

  1. 电脑主板接口_PCI接口借尸还魂?精英发布新款B450电脑主板,配备老式PCI接口...
  2. P1802 5 倍经验日(python3实现)
  3. 1.3 编程基础之算术表达式与顺序执行 04 带余除法
  4. python读取matlab文件_python写文件vs matlab写文件,由另一个s读取
  5. centos6配置mysql远程访问_Linux服务器配置-VSFTP服务配置(六)
  6. canvas笔记-closePath函数的使用(含例子)
  7. Redis工作笔记-主从复制Replication
  8. Qt工作笔记-对QObject::connect函数进一步认识(重载)
  9. sql查询 关联帖子_MySQL的大分页查询该如何优化?
  10. php程序内存空间,php如何管理内存