代碼最佳化的另一面

來源:互聯網
上載者:User

 

最佳化軟體是一件好事,但如果使用不當,就會好事變壞事。如果你在最佳化代碼時走向了錯誤的道路,那麼這種最佳化會提高開發成本、降低生產力。在軟體開發過程中,成本需要時刻謹記在心。一般來說,最佳化的軟體需要花費更長的時間來交付,因為你需要花費精力使它品質更高。有時候,你並不是為了運行速度而做最佳化。對於嵌入式系統來說,可能是減少記憶體使用量,對於手持功能,可能是硬體資源限制。最佳化的代碼通常難以調試和維護,因為你需要犧牲一些代碼可讀性。最佳化良好的軟體帶來的好處要多於坏處,但是如果你做了錯誤的最佳化,那麼結果恰恰相反。

到底怎麼才能做好代碼最佳化呢?Rick Cook給出了一些有用的建議。

你到底為了什麼而最佳化

如果在最佳化過程啟動時搞不清楚為什麼而最佳化,那麼你基本會走向錯誤的道路。你需要清楚的理解你準備完成的目標和相關的最佳化選擇。這些目標需要清晰而且簡潔,簡單到專案經理能夠理解它,你需要在最佳化過程中始終堅持這些目標。在軟體開發過程中,變更是常有的事情。你可能一開始想最佳化這個目標,然後又發現需要最佳化其他目標。事實也是如此,但是請把這些目標的變更記錄清楚。

效能測試團隊報告的效能缺陷可能是最佳化的主要目標,一方面它來自於開發人員之外的客觀效能問題,另一方面這些缺陷報告會明確的指出存在哪些問題,是運行緩慢,還是磁碟換頁頻繁等等。開發人員從這些缺陷中開始入手最佳化,比自己空想出的效能目標要合理、客觀的多。

小心對待最佳化的衡量標準

選擇正確的衡量標準是最佳化的重要步驟。你需要利用這些標準來衡量自己的最佳化進度。如果衡量標準是錯誤的,那麼你的努力就白費了。即使是正確的標準,也需要正確的運用。有時候,把主要精力放在應用程式已耗用時間最多的代碼部分上市正確的做法。不過請記住,Unix/Linux核心在空閑迴圈(idle loop)中花費的時間最多。這裡的問題是,如果你不小心對待,那麼你可能會選擇一個不能協助你解決問題的衡量標準。

衡量標準的選擇應該取決於哪些標準能夠確實提高使用者體驗。例如,有關資料庫的效能分析指標有很多,開發人員和效能測試人員需要確定哪些指標是真正影響應用程式速度的,是bufferpool的大小,還是資料庫連接池的大小。這是一個漸進的認識過程。

最佳化且只最佳化關鍵區段

這是有效最佳化的關鍵。尋找能夠達到目標(效能、資源)的代碼部分並集中精力。一個典型的例子是把時間花費在最佳化資料庫上,而實際的效能殺手是緩慢的網路連接。

不要被映入眼帘的表象所吸引。這些表象並不一定會解決你的問題。只是因為某些事情易於發現而且易於最佳化並不意味著它們值得關注。 

高層次最佳化更好

一般來說,最佳化的層次越高,最佳化的效果就越明顯。按此標準,最好的最佳化方法是尋找更好的演算法。例如,在一些IT部門,員工花費幾個月的時間來對某個軟體做最佳化但是沒有進展,然後找來一批新員工來做這些最佳化,他們很快就會發現效能的問題在於代碼某處使用了冒泡排序或者某張資料庫表增加了數以萬條的記錄等等。

建議大家花時間看看基本的應用架構,找找有沒有可以最佳化的線索。但是,高層次最佳化不是銀彈。一些基本的技術,比如把代碼儘可能的移到迴圈體外面等等。

另外,高層次最佳化可以避免對代碼細節的複雜重構。開發人員往往對低層次的最佳化最感興趣,請控制住自己的慾望,從高處著手! 

不要過早最佳化

開發人員有一種衝動,那就是在編碼的時候就準備最佳化了。一般來說,這不是個好主意。有時候,開發人員並不確定這樣的最佳化工作是否值得。例如,你可能通過移位操作來代替乘法操作,但是這種效能最佳化的做法會產生讓人非常難以理解的代碼。

最好把開發和最佳化工作分開,先開發出正確的代碼,然後再最佳化。過早最佳化的問題在於開發人員會有意的對軟體的架構設計和代碼結構等做一些預先的設想,而其中有相當一部分都是多餘操心的,你可能不得不對這些多餘的部分再做最佳化。

依靠效能分析資料,而不是直覺

你以為自己知道軟體系統哪裡需要最佳化,但是直覺是第二位的,資料是第一位的。否則,你會發現可能把一段代碼最佳化的非常快,但是實際上很少被調用。

最佳化的一個有效策略是,你要根據所做工作對最佳化效果的影響來進行排序。在開始工作之前找到影響最大的“路障”,然後再處理小的“路障”。 

不能指望最佳化解決所有問題

最佳化的重要法則之一是不能讓最佳化解決所有問題,比如,提高運行速度會耗費更多系統資源。你必須為了主要的最佳化目標做出權衡。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。