在項(xiàng)目中,我們都經(jīng)常面臨所開發(fā)的產(chǎn)品性能問題。然而這些問題都不是很容易解決。大多性能問題追根究底都是系統(tǒng)架構(gòu)或者說是設(shè)計(jì)問題。推翻了重做是不可能的,怎么從這些問題中吸取經(jīng)驗(yàn)教訓(xùn)才是正道。來看看我遇到的設(shè)計(jì)問題。
案例: 企業(yè)級應(yīng)用系統(tǒng),技術(shù)使用了JSF 數(shù)據(jù)庫Oracle. 主頁面范圍超慢,大概半分鐘。
問題很多,主要有一下幾點(diǎn):
1. 數(shù)據(jù)庫設(shè)計(jì)嚴(yán)格遵守了范式設(shè)計(jì),導(dǎo)致表關(guān)聯(lián)很多。頁面數(shù)據(jù)大多需要從至少10張表聯(lián)合獲取。
2. 重度使用JSF 組件樹過大。
3. 代碼上冗余邏輯,大量沒有必要的處理。
如何解決呢
1. 對于第一個問題, 還是多學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)庫設(shè)計(jì)以及如何寫出高效的SQL,推薦一本書 SQL反模式 可以指導(dǎo)如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。畢竟大多數(shù)應(yīng)用系統(tǒng)需要數(shù)據(jù)庫的支持。寫SQL同時想想是不是這個SQL是最優(yōu)的。 資深的程序員應(yīng)該對SQL優(yōu)化有一定的了解。
2. 在設(shè)計(jì)開發(fā)應(yīng)用系統(tǒng)初期,就要多了解你選技術(shù)的不足,盡量避免由技術(shù)不足帶了的問題。畢竟任何技術(shù)都有其優(yōu)勢和不足。 比如問題2,盡量減少組件樹,或者使用facelet來build UI .
3. 問題3就純粹是程序員個人問題和團(tuán)隊(duì)流程問題了。 無論是用任何方式 比如測試驅(qū)動 結(jié)對編程等 流程畢竟是流程,程序員的個人素質(zhì)與修養(yǎng)是整個產(chǎn)品質(zhì)量的保證。 這點(diǎn)我還是相信找到合適的程序員讓他喜歡或者對自己開發(fā)的產(chǎn)品有認(rèn)同感才是最好的解決方式。如果連自己做的都不感興趣,就靠流程,也是僅僅保證少許問題而不是高質(zhì)量的產(chǎn)品。
以上就是我的一點(diǎn)看法。welcome to other idea . Thanks
2012/11/20 Beijing