关于代码效率提升的方法心路历程(购物车)
關(guān)于代碼效率提升的方法心路歷程(購(gòu)物車(chē))
給為園友們,大家好,最近一直解決執(zhí)行提速,分析老代碼的邏輯并提出優(yōu)化方案,在這個(gè)過(guò)程中發(fā)現(xiàn)了很多不好的習(xí)慣,導(dǎo)致很多程序邏輯執(zhí)行效率低下,現(xiàn)在將其總結(jié)一下,如果大家覺(jué)得有參考意義,就看一下,如果覺(jué)得有問(wèn)題,多多指點(diǎn),如果覺(jué)得寫(xiě)的不好,也勿噴,謝謝!
案例分析:
關(guān)于購(gòu)物車(chē)效率的提升,在優(yōu)化前,購(gòu)物車(chē)需要3-5秒才能夠查詢出來(lái)數(shù)據(jù),并且購(gòu)物所有商品全部刷新重新渲染。對(duì)此,我將整理執(zhí)行邏輯分析了一下,發(fā)現(xiàn)有很大的提升空間,下面的是我一個(gè)分析邏輯:
我分析了一下現(xiàn)在購(gòu)物的代碼調(diào)用執(zhí)行邏輯
1、初始化購(gòu)物車(chē)時(shí),購(gòu)物車(chē)全商品渲染(獲取商品、獲取優(yōu)惠券等)(沒(méi)問(wèn)題)
2、購(gòu)物車(chē)商品增減操作步驟
2.1:調(diào)用獨(dú)立接口只更新對(duì)應(yīng)的商品數(shù)量
2.2:數(shù)量更新后,在按照初始化購(gòu)物的邏輯一樣
重新獲取數(shù)據(jù)渲染頁(yè)面
3、后端接口計(jì)算價(jià)格邏輯
3.1:獲取根據(jù)用戶獲取購(gòu)物車(chē)商品
3.2:遍歷每一個(gè)商品計(jì)算對(duì)應(yīng)的價(jià)格
3.2.1:獲取該商品的價(jià)格因子數(shù)據(jù)
3.2.2:根據(jù)商品查詢最近的配送倉(cāng)庫(kù)
??????? ?3.3:其他業(yè)務(wù)邏輯處理
????????這樣下來(lái),一個(gè)商品的價(jià)格計(jì)算完成,都是需要調(diào)用10次左右的數(shù)據(jù)庫(kù)
購(gòu)物車(chē)商品數(shù)量越多,數(shù)據(jù)庫(kù)操作次數(shù)是成倍數(shù)增加
改進(jìn)方案
其實(shí),經(jīng)驗(yàn)好一點(diǎn)的同學(xué),一看就知道里面的問(wèn)題所在
我給出的優(yōu)化方案從兩個(gè)點(diǎn)出發(fā),其一、前后端數(shù)據(jù)交互上改進(jìn);其二、接口計(jì)算價(jià)格邏輯改進(jìn),具體如下:
其一、前后端數(shù)據(jù)交互上改進(jìn)
減少不必要的數(shù)據(jù)交互方式,具體體現(xiàn)在:
a、購(gòu)物車(chē)商品數(shù)量發(fā)送改變時(shí),不在整體渲染購(gòu)物車(chē)列表
b、購(gòu)物車(chē)商品數(shù)量發(fā)送改變時(shí),去掉不必要的接口調(diào)用
c、最終數(shù)量改變,只調(diào)用一個(gè)接口搞定,接口的具體功能是:
c1:對(duì)該用戶的該商品的購(gòu)物車(chē)數(shù)據(jù)做加減
C2:如果操作成功,那么重新計(jì)算該商品對(duì)應(yīng)的店鋪的購(gòu)物車(chē)商品價(jià)格數(shù)據(jù)
并返回前端,前端只渲染處理該店鋪的商品數(shù)據(jù)即可
其二、后端計(jì)算價(jià)格邏輯改造
改造簡(jiǎn)單思路是:想獲取所有數(shù)據(jù)集合,具體的數(shù)據(jù)組裝加工放在內(nèi)存中加工,這樣減少數(shù)據(jù)庫(kù)操作,
a:獲取根據(jù)用戶獲取購(gòu)物車(chē)商品
???? 如果是更新購(gòu)物車(chē)數(shù)量計(jì)算價(jià)格,需要加一個(gè)店鋪限制條件
b:根據(jù)獲取到的所有商品,批量獲取影響這一些商品的價(jià)格因子集合
c:根據(jù)獲取到的所有商品,批量獲取對(duì)應(yīng)的店鋪的倉(cāng)庫(kù)消息集合
????????d:遍歷商品
d1:根據(jù)獲取到價(jià)格因子,計(jì)算價(jià)格
d2:根據(jù)獲取到的倉(cāng)庫(kù)消息,計(jì)算最近的倉(cāng)庫(kù)配置地
? 優(yōu)化后的結(jié)果:
1、初始化購(gòu)物車(chē)40個(gè)商品也就只需要1S不到
2、商品加減操作,響應(yīng)速度毫秒級(jí)
為了讓整方案能夠?qū)嵤┢饋?lái),也是提了幾次建議,最后才接收采納,現(xiàn)在想來(lái)不容易啊,自己都不知道為什么執(zhí)行起來(lái)這么曲折。
當(dāng)然,目前的效果,也還有優(yōu)化提升的空間,我也給了一下建議
1、可以加上一些緩存機(jī)制,比如服務(wù)端對(duì)用戶購(gòu)物車(chē)數(shù)據(jù)緩存5分鐘
??????? 對(duì)于大部分用戶來(lái)說(shuō),在購(gòu)物車(chē)操作一次數(shù)據(jù)不會(huì)等待5分鐘
這樣還能進(jìn)一步提高效率
2、價(jià)格計(jì)算可以放到前端計(jì)算,這而可以加一下策略機(jī)制
比如在購(gòu)物車(chē)頁(yè)面停留達(dá)到一定時(shí)間,前端重新取一次最新的價(jià)格因子等信息
??? 為什么說(shuō),可以將價(jià)格計(jì)算在前端算,我個(gè)人理解,在購(gòu)物車(chē)的價(jià)格只是一個(gè)展示,并不是用戶的最終購(gòu)物價(jià)格,最終價(jià)格都是在結(jié)算頁(yè)面下單時(shí)計(jì)算為準(zhǔn)。即使價(jià)格每次采用后端計(jì)算,那么用戶在結(jié)算的時(shí)候,也不一定就是購(gòu)物車(chē)展示的價(jià)格,因?yàn)?#xff0c;在用戶在購(gòu)物車(chē)停留期間,也有可能后臺(tái)價(jià)格因子發(fā)改變,到賬到結(jié)算頁(yè)面的最終價(jià)格與購(gòu)物車(chē)價(jià)格不一致。
小結(jié)
通過(guò)上面的購(gòu)物車(chē)改進(jìn)案例分析,總結(jié)如下:
1、在優(yōu)化某一功能時(shí),一定要站在全局去剖析問(wèn)題
2、在具體的優(yōu)化點(diǎn)上,一定要考慮分析問(wèn)題的瓶頸點(diǎn),
找到最優(yōu)的解決辦法,而不是只是把功能實(shí)現(xiàn)就完事了
多問(wèn)一個(gè)為什么要這樣處理?還有最優(yōu)的策略嗎?
不然,我們和初級(jí)程序員有什么優(yōu)勢(shì)呢?
3、多給自己充電,積累經(jīng)驗(yàn),這樣才能夠找到合理的方法
? ??要善于接受新的事物,不然自己就會(huì)慢慢的跟不上節(jié)奏。
轉(zhuǎn)載于:https://www.cnblogs.com/xiaoXuZhi/p/code_optimization.html
總結(jié)
以上是生活随笔為你收集整理的关于代码效率提升的方法心路历程(购物车)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CentOS7 正确安装mysql(亲测
- 下一篇: 【DB2】delete大表不记录日志的正