關(guān)于前置和后置是我自己理解的兩個(gè)概念,我理解為:
- 如果某些工作我們放在業(yè)務(wù)執(zhí)行之前去做,就叫前置處理
- 如果某些工作我們放在業(yè)務(wù)執(zhí)行之后去做,就叫后置處理
這兩個(gè)設(shè)計(jì),基于我們不同的場(chǎng)景可以極大的提高我們的處理性能.
一.前置處理
這個(gè)咱們之前也說過了,比如一些商品、活動(dòng)、庫存等信息的預(yù)熱,我們要提前進(jìn)行,該緩存的緩存,該推到CDN的去推,這樣我們活動(dòng)真正開始的時(shí)候就幾乎可以達(dá)到百分之百的緩存命中率了,大幅度降低數(shù)據(jù)庫壓力.
這里主要進(jìn)行后置處理的說明
二. 后置處理
某些工作我們放在業(yè)務(wù)執(zhí)行之后去做,就叫后置處理,某些操作我們可能不需要立馬進(jìn)行,我們可以根據(jù)某一代碼的執(zhí)行結(jié)果去做出自己的反饋,這樣的情況,我們可以做后置執(zhí)行.
下面我舉一個(gè)自己項(xiàng)目中的例子.
我這里有個(gè)郵件發(fā)送的服務(wù),我們使用的郵件平臺(tái)提供了以SMTP的形式發(fā)送郵件的功能,但是呢這種發(fā)送形式不會(huì)給我具體發(fā)送結(jié)果,我只能知道送達(dá)成功或者失敗,失敗的話不知道是什么原因,發(fā)送有兩個(gè)需要驗(yàn)證的點(diǎn),可能會(huì)導(dǎo)致郵件發(fā)送失敗
- 1.發(fā)送平臺(tái)賬號(hào)信息
- 2.發(fā)送發(fā)件人的賬號(hào)密碼信息
我這里要進(jìn)行郵件發(fā)送并且記錄失敗具體原因
那么如果采用前置法: 校驗(yàn)信息前置,那么過程是
- 先驗(yàn)證平臺(tái)賬號(hào),如果驗(yàn)證失敗就提前中止反饋賬號(hào)驗(yàn)證失敗
- 如果驗(yàn)證成功了再進(jìn)行攜帶賬號(hào)密碼的SMTP郵件發(fā)送,如果發(fā)送失敗了再反饋賬號(hào)密碼校驗(yàn)失敗
前置法偽代碼如下:
//如果賬號(hào)校驗(yàn)失敗
if(accountErrorCheck(account)){
return "平臺(tái)賬號(hào)密碼校驗(yàn)失敗";
}
try{
send(sendAccount,mailInfo)
}catch{
return "郵件賬號(hào)密碼校驗(yàn)失敗";
}
這樣就有一個(gè)問題,大部分情況下我們賬號(hào)和密碼其實(shí)都是沒有問題的,如果這樣做的話,就會(huì)導(dǎo)致我們每次郵件發(fā)送都進(jìn)行了一次賬號(hào)校驗(yàn)情況,很沒必要,所以我們來看下后置法
后置法,先直接發(fā)送郵件,如果出現(xiàn)問題了,我們?cè)龠M(jìn)行原因的分析??
后置法偽代碼如下:
try{
//直接進(jìn)行郵件發(fā)送
send(sendAccount,mailInfo)
}catch{
if(accountErrorCheck(account)){
return "平臺(tái)賬號(hào)密碼校驗(yàn)失敗";
}else{
return "郵件賬號(hào)密碼校驗(yàn)失敗";
}
}
如上面的代碼,我們不管三七二十一直接發(fā)送郵件,絕大部分賬號(hào)密碼都是沒問題的,可以正常投遞,少部分會(huì)有問題,我們?cè)倬唧w分析,這樣就可以減少了幾乎一半的請(qǐng)求耗時(shí)了,極大的提高我們的處理處理能力;