軟件最佳化
軟件最佳化(英文:optimisation ),官話化啲嘅又叫軟件優化,指將軟件改到更加有效率,等系統行起上嚟唔洗佔用咁多資源。簡單例子有檢查隻軟件嘅源碼,確保段嘢完全冇任何多餘嘅碼:想像依家編寫網上遊戲嘅程式,隻遊戲好受歡迎,有數以十萬計嘅玩家;若果程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼,於是就可能會搞到伺服器嘅負責大咗好多。因此,最佳化喺實際嘅軟件工程工作上相當受重視[1]。
微最佳化(英文:micro-optimisation )係指喺程式嘅底層做細微嘅改動,達致最佳化嘅效果。
要學軟件最佳化,一般要識咗電腦程式編寫嗰啲基礎概念先。
基礎概念
[編輯]軟件最佳化係軟件工程上嘅重要工序:軟件泛指用嚟做某啲特定功能嘅電腦程式,例如電子遊戲就係用嚟做娛樂用途嘅軟件,畀用家玩遊戲;單憑日常觀察可知,部電腦要行電腦程式,梗要或多或少花費時間同埋記憶體,而事實表明,編程員寫程式嗰陣用嘅手法,會影響個程式要行幾耐先行得完(睇埋編譯期同執行期等嘅概念)或者程式要使用幾多記憶體[2][3]。
舉個簡單例子,依家想寫個程式,程式要攞個數 a 做 input,output 出晒所有
- 細過或者等如 a、又係 10 嘅倍數
嘅數,即係[4]
- 如果
input係 200,就要出200, 190, 180, 170, 160,...噉嘅一列數; - 如果
input係 150,就要出150, 140, 130, 120, 110,...噉嘅一列數;
想像下面依段虛擬碼:
a = 200; # 設 a 做 200 while (a > 0) # 可以睇埋 while 迴圈嘅概念。 { b = 10; if (a % b == 0} # 如果 a 係 b 嘅倍數,print a 出嚟睇。 print(a); a -= 1; # a 數值下降 1 }
上面段碼查實唔係咁有效率-b = 10 呢個步驟唔洗喺個 while 迴圈每個圈都行一次,而由於段碼有不必要嘅步驟,就搞到段碼行起上嚟慢咗。上面段碼可以改做:
a = 200;
b = 10;
while (a > 0)
{
if (a % b == 0}
print(a);
a -= 1;
}
-b = 10 呢個步驟就變成淨係做一次咁多,令到段碼效率高咗。軟件最佳化指緊嘅就係[2]:p. 1[5]:
- 要減少程式消耗嘅資源量,當中資源量包括-
- 碼嘅
行 數、 - 行起上嚟花嘅時間,
- 行起上嚟花嘅記憶體量,
同時
上面呢個例子相當簡單。就算做咗最佳化,齋靠肉眼睇唔覺佢行得快咗。但係專業軟件工程上整嗰啲軟件,閒閒哋成幾萬行碼咁長,有啲甚至仲有成上億行碼[6]。對於噉嘅軟件嚟講,如果佢哋每 50 行碼就要嘥多 10 毫秒嚟行,已經會對佢實際用嗰陣嘅表現造成具體影響。因為噉,專業嘅軟件工程師都會關注最佳化,會諗好多技巧想令啲程式更有效率。
層面
[編輯]呢節要加長。 |
演算法
[編輯]源碼
[編輯]技巧
[編輯]呢節要加長。 |
物件池模式:屬於設計模式一種,講緊初始化嘅時候建立一拃物件嘅實例,形成所謂嘅物件池,等到個程式行起上嚟要用嗰時,就攞嗰啲物件嚟用,用完就將件物件掟返去物件池裡便;呢種做法,相對於喺個程式行嗰陣建立同毀滅物件—建立同毀滅物件係相當花資源嘅,用咗物件池就有助達致最佳化[7]。
缺點
[編輯]呢節要加長。 |
睇埋
[編輯]文獻
[編輯]
- Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
引述
[編輯]- ↑ Wadleigh, K. R., & Crawford, I. L. (2000). Software optimization for high-performance computing. Prentice Hall Professional.
- ↑ 2.0 2.1 Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
- ↑ Lowry, E. S., & Medlock, C. W. (1969). Object code optimization (PDF). Communications of the ACM, 12(1), 13-22.
- ↑ Code Optimization in Compiler Design. GeeksForGeeks. 1. Code Motion or Frequency Reduction, Example.
- ↑ Performance Optimization in Software Development. Medium.
- ↑ 5 Most Complex Software Ever 互聯網檔案館嘅歸檔,歸檔日期2022年10月8號,.. JavaScript in Plain English.
- ↑ COM+ Object Pooling Concepts
拎
[編輯]- (英文)編譯器設計中嘅代碼最佳化,GeeksForGeeks