技術(shù)控眼中的數(shù)字系列--高效率的『1』
數(shù)字一是一個不一般的數(shù),它首先是自然數(shù)序列的開始,它是道家『道生一,一生二,二生三,三生萬物』中『道』,它是『一心一意』的專注,也是很多人『一生一世』的追求。
在技術(shù)控嚴(yán)重,很多情況下,數(shù)字一的印象最為深刻:如果能把事情一次性做好,那就是非常高效愉悅的事情。
有一個『美女下屬要求加薪,老板竟然這樣讓他啞口無言』故事。“一家客戶準(zhǔn)備到公司來考察產(chǎn)品狀況,你聯(lián)系一下他們,問問何時過來。”老板對要求加薪的美女下屬說。一刻鐘后,她回到老板辦公室。“聯(lián)系到了嗎?”老板問。“聯(lián)系到了,他們說可能下周過來。” “具體是下周幾?”老板問。“這個我沒細(xì)問。”“他們一行多少人。”“啊!您沒問我這個啊!”“那他們是坐火車還是飛機(jī)?”“這個您也沒叫我問呀!”。
而另一個秘書的回答是:“他們是乘下周五下午3點(diǎn)的飛機(jī),大約晚上6點(diǎn)鐘到,他們一行5人,由采購部王經(jīng)理帶隊,我跟他們說了,我公司會派人到機(jī)場迎接。另外,他們計劃考察兩天時間,具體行程到了以后雙方再商榷。為了方便工作,我建議把他們安置在附近的國際酒店,如果您同意,房間明天我就提前預(yù)訂。還有,下周天氣預(yù)報有雨,我會隨時和他們保持聯(lián)系,一旦情況有變,我將隨時向您匯報。”
這個故事我們不從別的角度去詮釋,單從『一次性把事情做好』的角度上來看,***位要求加薪的秘書的沒有一次性把事情做好,所以效率低下,所以老板不滿意,所以加薪難。
對于IT技術(shù)而言,能不能只需要一次請求就能完成業(yè)務(wù)呢?能不能只需要一次數(shù)據(jù)庫操作就能完成業(yè)務(wù)數(shù)據(jù)更新呢?能不能只需要一次API調(diào)用就能拿到所需全部數(shù)據(jù)呢?能不能只要一次就把代碼寫對呢?
下面,我們就從幾個案例來看看『1』是多么的高效率。
一、高效的頁面顯示順序調(diào)整過程
這個頁面的業(yè)務(wù)要求是,可以用鼠標(biāo)拖動來調(diào)整顯示頁的順序。我們的小伙伴又是怎么實現(xiàn)的呢?大概瞅了一眼代碼,每一頁都有一個順序號,拖動后,后臺將所有的相關(guān)記錄全部更新一次調(diào)整后的顯示順序號。這個實現(xiàn)方案初看能搞定,但是要從前端傳輸所有頁的調(diào)整后新順序號,要更新數(shù)據(jù)庫里面多條記錄。
能不能簡單點(diǎn)呢,只調(diào)整被拖動頁的順序號,只更新被拖動頁的一條數(shù)據(jù)庫記錄呢?開動腦筋很容易就想到,我們只要不拘泥于自然數(shù)字的編號就行了。比如原始順序是1 2 3 4 5 6,我們拖動第5頁到1與2之間,只要把第5頁的順序號調(diào)整為1.5即可,也就是調(diào)整后的順序是1 1.5 2 3 4 6。
一下子,我們從頁面?zhèn)鬟f數(shù)據(jù)簡單了,只需要傳遞一條數(shù)據(jù)即可。數(shù)據(jù)庫操作也簡單了,只需要更新一條記錄即可。
二、高效的充值卡銷售過程

這個充值卡銷售的業(yè)務(wù)大概實現(xiàn)流程是,從數(shù)據(jù)庫充值卡表中,查詢出100元面值的可用狀態(tài)的記錄,嘗試鎖定,然后在付款完成后,修改其狀態(tài)為已銷售。問題在哪里呢?從業(yè)務(wù)上來說,月初月末,會有大量并發(fā)購買充值卡的業(yè)務(wù);從技術(shù)上來說,從充值卡表中進(jìn)行查詢的檢索條件是面值100元和狀態(tài)可用,這兩個檢索條件對于上萬條記錄的充值卡表數(shù)據(jù)來說沒有很好的分散性,又不容易走主鍵或者索引,因此查詢效率非常地下。即使在查詢效率還能忍受的情況下,大量并發(fā)又容易導(dǎo)致選卡沖突,需要重新隨機(jī)查詢選卡,所以處理邏輯就在『隨機(jī)查詢可用狀態(tài)的充值卡記錄』(一條好復(fù)雜的SQL一般人還真看不懂)->『嘗試鎖定』->『修改狀態(tài)為已銷售』的流程中耗費(fèi)大量的時間和精力,數(shù)據(jù)庫也經(jīng)常在并發(fā)量大的時候被折騰的『夠嗆』。
如果換一種思路,能不能一次搞定這種充值卡銷售呢,不需要查詢,不需要嘗試鎖定,直接挑出一張可售狀態(tài)的充值卡,直接一步到位『修改其狀態(tài)為已銷售』呢?(注意,前方高能)。其實,細(xì)細(xì)想來,還是有辦法的,我們?yōu)槌渲悼ū斫ㄒ粋€自然順序的唯一索引,然后銷售的時候,直接取下一個增1的索引號,然后直接去用這個索引號取拿卡,搞定。銷售流程實現(xiàn)簡單了,SQL也好寫了(唯一索引更新),數(shù)據(jù)庫也嗨皮了。更多關(guān)于取了卡最終未付款等的細(xì)節(jié)問題,留待讀者自己思索,或者來與我交流。
三、HTTP優(yōu)化的未來:一個文件

前端性能黃金法則中的第1條就是『減少HTTP請求』,就是說盡量把外鏈腳本和樣式表進(jìn)行合并會減少HTTP請求,以節(jié)省客戶端和服務(wù)器之間的通訊次數(shù)來加快頁面打開速度。對于這種減少HTTP請求數(shù)量的***追求,就是一個全量的HTML文件,就真的只要一次請求就搞定,所有的CSS/JS/IMAGE全部放在一個文件中來。

四、干凈代碼中的『只做一件事』

我們在『代碼整潔之道』中,反復(fù)強(qiáng)調(diào)『只做一件事情』,函數(shù)只做一件事情,類也只做一件事情。做的事越多,代碼就會越冗長,越難以理解,越被人被將來的自己罵X。整潔的代碼只做好一件事,不要重復(fù)代碼。
這個『一件事』在SOLID設(shè)計原則中,又稱為『單一職責(zé)原則』。但是何為『一件事』呢,簡單說來,就是你能不能一句話說清楚,這個函數(shù)/類是干什么的,沒有『并且』,沒有『或者』。如果還是覺得抽象的話,建議去看看『代碼整潔之道』這本書。
上面的幾個例子,都充分體現(xiàn)了,一次性把事情做好,是多么高效多么愉快。日常生活中,希望跑一次醫(yī)院就把病看好,只要在一個柜臺就能把事情辦完,只要一張卡就可以刷遍公交地鐵出租等。在我們技術(shù)控眼里,追求***追求高效的時候,也是需要經(jīng)常想想,是不是可以一次性把事情做好?;蛟S這也是牛B與專業(yè)的區(qū)別,牛B能把事情做出來,雖然要多弄幾次,但是專業(yè)卻是可以把事情一次性就做好。
作者簡介:
黃進(jìn)兵,亞信科技架構(gòu)師,從事10余年移動通訊計費(fèi)軟件和電信運(yùn)營商電子商務(wù)系統(tǒng)架構(gòu)。擅長互聯(lián)網(wǎng)業(yè)務(wù)和技術(shù)架構(gòu),云端架構(gòu)等相關(guān)技術(shù)架構(gòu)方案。