執行效能優化需要有的十個心態

【HyperConnezion 效能改革專欄 #2】


本文為效能改革系列文當中的第一篇,期望能夠協助各位更快速地邁向成功之路。

做為終端使用者,當我們覺得某些網路服務很難使用時,我們總覺得這似乎不是我們能夠控制的。我們以為自己能改變的不多,最多僅是怪罪在軟體工程師或是服務提供者,然而事實是 — 沒有什麼是我們不能掌控的。我們可以提供意見反饋,也可以決定更改現有的服務配置以及服務提供者。換言之,我們其實可以更積極地創造改變!

效能優化是一種心態、一種態度,及一種生活的選擇。請記得,如果有一天你見到一位工程師正在執行交辦的任務、卻沒有將心思花在效能優化上,那他寫出來的就會是未優化的程式碼。

優化是一件大家都知道卻沒有人去做的事,如果你能知道以下幾點,並實際去操作,便再好不過了!

一、加快速度

以前我們總能夠取得更快速的 CPU來改善效能,但現在這樣的時代已經結束了。取而代之,使用平行處理(Parallelism)的做法是更關鍵的成功要素。當有需要時增加 CPU的數量是目前最為簡易且有效的方式。多執行緒編碼 (Multi-threaded code)也是優化的重要元素。死結(Deadlocks)必須減到最少。考慮無鎖數據結構及演算法(lock-free data structures and algorithms),並選擇無閉塞(non-blocking)的網頁伺服器吧!

二、大 O 符號通常很不切實際

現在使用大O符號又更加地不切實際,大家所追求的效能到底是什麼?無論是關於固定時間或對數時間,最重要的還是常用的數據處理的速度。現在的電腦比以前複雜許多 — 緩存未命中、多執行緒編碼及各式各樣的原因,都能成為理論與實際操作不合的理由。在達到平衡點之前,你需要有多大量的數據呢?

三、自己親身體會效能

這應該是身為工程師所應該花費較多時間的地方。我們盡可能嘗試推遲下載JavaScript和 CSS,以讓使用者先看到部分網頁。使用者可以等,但他們更想要得到一些回饋,這與使用者的互動有關。最終,效能優化希望達到的還是減少當機時間(例如:系統超出負荷的時候)、讓使用者的經驗更好(例如:減少瀏覽器的等待時間)等。在做之前,先想想看最終效能優化的目的是什麼,不要只是開發程式碼,也不要只是配置應用程式,有許多工程師從來沒有使用過他們的應用程式。親身站在終端使用者的立場,想想看實際的感覺跟問題到底為何,不要等被使用者檢舉了才開始做!

四、更早辨識出瓶頸

在最後的開發生命週期當中,我們通常使用性能分析來辨識瓶頸,但我們為何不早些做呢?身為一個經驗豐富的開發者或是系統管理者,我們通常可以較早預測出瓶頸在哪。當預期在應用程式的某個部分可能會花較多時間,就儘快優化那個部分吧!最理想的開發狀態是,我們應該且必須要能夠辨識出瓶頸、同時寫出測試案例(test cases)。千萬不要忽略這些速度較慢的地方!也許它對只想趕快將功能推出的PM來說無關緊要,但如果你自己太晚提出,最後終究會影響到你自己。

五、水平式擴充 (Horizontal scaling)是另一個更簡單及有效的解決方法

水平式擴充是現在應用程式領域中的一個重要的概念。我們現在處在雲端的時代,在需求端增加資源是一件十分簡單的解決方法,而關鍵是這件事能夠怎麼被完成以及效率如何。增加前端載入的均衡器(frontend load balancers)及任何額外的設備作為解決方法都很容易,但如果你的應用程式沒辦法配合便毫無意義。瓶頸在哪?不論我們有多少個服器,如果要寫資料的時候仍卡在資料庫的鎖,那還是沒有比較快。

六、效能是個重要的衡量指標

請將效能測試含括在你產品設計與計畫中的一部份。效能是個需要被改良的重要指標。當在設計任何專案架構時,務必得到確切的使用者總數,包含未在預期中可能的使用高峰。參考其他的網站及應用程式,並把衡量指標分散,例如:把一篇貼文儲存到新的部落格平台上需要花多少時間?並進行比對,拒絕將任何未通過效能測試的程式碼,作為開發策略的一部份。

七、效能優化是一個很長的旅程

為未來做計畫、看得更長遠!你是否常花費時間在開發一個細部功能上、而非著眼於產品全局?它可能只會花五分鐘的時間在現有的代碼庫中增加點東西,或是設置一個適合的開源解決方案。花五分鐘把它好好完成吧!千萬不要讓任何事物影響到你!

八、持續尋找更快的方法

人通常都是懶惰的,我們通常都用習慣的方法來做事,但是一定都有更好的辦法。不斷地進步吧!把目光放到世界,也許有另一個程式庫已經釋出,或是一個新的程式模型。千萬不要固守以前的方法,因為一定有更簡單的方法!

九、功能已不再是銷售賣點了

現今的商業決策逐漸傾向提早釋出、晚點再更新版本。特色功能通常之後再釋出,以利持續吸引更多消費者購買。在這個充滿服務的社會(軟體為服務模型),我們開始使用預購(subscription)的方式購買產品。所以你也不用再有所保留,因為人們會不斷地購買,且消費者也無法因為新版本不吸引人,而選擇不更新。我們正處於一個充滿不同的商業型態及心態的社會,所以必須改變!

十、讓測試成為習慣

思考靈活一些,設定檔並不會是個麻煩。新功能定期測試的同時,不要忘了同時檢視效能,確保未來不會有太大的問題。有其他更夠讓你快速解決的方法嗎?如果沒有,至少要記錄以在未來的開發上有所參考。保持隨時審視、並且讓測試成為習慣。

更多效能改革觀點,敬請期待!

HyperConnezion 的「效能改革系列專欄」希望能夠屏除人們對於效能的迷思,並引導大家要怎麼擁有正確的心態做出正確的決定。在下一篇文章中,我們將討論用不同的策略去確保網頁在任何時候都保持高效能,而不是在出狀況之後才去設法補救。敬請期待!

###

【作者簡介】

Harry Chan,HyperCconnezion創辦人,於香港出生並於澳洲接受教育。於IT產業的創業經驗近5年半,也曾經於澳洲業界和政府單位從事IT管理職務約6年。長期關注雲端、網路、IT管理、企業應用等領域。

【關於HyperConnezion】

HyperConnezion是一個提供雲端解決方案和IT管理服務的公司,致力於成為各家企業的最佳IT夥伴。無論是個人、新創、中小企業乃至於大型企業,HyperConnezion均能提供客戶量身打造的IT顧問建議與服務。目前HyperConnezion在雪梨、香港、台北均設有據點。更多消息請上:

FB官方粉絲團:https://www.facebook.com/hyperconnezion/

官方網站:https://hyperconnezion.com/

Twitter : https://twitter.com/HyperConnezion

LinkedIn : https://www.linkedin.com/company/hyperconnezion

IG : https://www.instagram.com/hyperconnezion

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.