網站程式加速的策略

來自 | 6 月 9, 2024 | 程式 | 0 條留言

有陣子常接到要解決網站的效能問題
簡單的總結出心得

策略概述

  1. 找出瓶頸
  2. 鬆綁瓶頸

如何找出瓶頸 → 使用量測,測試各個環節的執行速度

鬆綁瓶頸 → 不改變結果的情況下重構程式增進效能。

鬆綁後會有新的瓶頸(就是另一個造成緩慢的問題),再去重複找出與鬆綁瓶頸的過程。

鬆綁瓶頸的策略

資料庫

  1. 建立正確的索引欄位,尤其是要Join的識別欄位要設定索引。
  2. 減少查詢次數,例如:建快取、避免碎片化的查詢。
  3. 減少每次查詢返回資料筆數,例如不要用 Where In 。
  4. 減少返回的資料欄位,只撈用的到的欄位
  5. 定時重整索引。
  6. 調整資料庫結構,進行正規化或反正規化。
  7. 減少Trigger,盡量不要使用。
  8. 刪除錯誤的索引。
  9. 盡量不在DB端處理資料,例如Convert , Case When….
  10. 減少子查詢、Join。
  11. 不要用Like查詢
  12. 查詢有是否存在時使用 Select Top 1 1 From [table] Where ... 不要使用Count > 0

程式面

  1. 可以的話先不去動原始程式,另外寫一個重構後的,新舊程式可以使用單元測試驗證輸出入結果,後續最佳化時候再刪除舊版的程式。
  2. 減少記憶體複製的動作,例如 var a = b ,ToList()。
  3. 為重複使用的資料建立快取。
  4. 盡量使用C#有提供的函數處理資料,例如Contain會比IndexOf 效率好。
  5. 使用強型別,例如:DataTable改用List,強型別處理資料會比弱型別快很多。
  6. for改用foreach。
  7. 改成非同步執行。
  8. 使用多執行緒。
  9. 減少轉型。
  10. 大量組合字串使用StringBuilder ,不使用字串相加。
  11. 使用SQL指令使用Const String,不要去組合字串,效能會變很差。
  12. 職責分離,拆解大物件中與職責不相干的方法,移除不相關的欄位,如果類別很肥大,每次建構都後都會佔用大量記憶體,資料回收後也會佔用大量系統資源。
  13. 解耦循環參照的類別。
  14. 改用依賴注入與資源管理器。
  15. 使用資源管理器限制每個查詢連線數。
  16. 使用抽象與介面改寫。
  17. 資源要確實回收,實做Dispose模式,並在Using呼叫它。
  18. 使用單元測試測量改善前後執行狀況。
  19. 減少boxing跟unboxing。
  20. 減少產生的變數,刪除用不到的變數,這樣可以減少資源分配與回收耗掉的效能。
  21. 使用Nlog取代自己寫的Log工具。
  22. 善用建構式與Readonly屬性
  23. 以Release設定編譯程式。

0 條留言

提交留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *