Lean Code Paths - 精益程式碼路徑
從一個真實的操作開始。呼叫者顯示或操作了什麼?沿著該需求追蹤 API、服務、中介軟體、ORM 以及執行的 SQL。在受影響路徑上最早的位置消除不必要的工作。在日常開發中使用直接且低成本的方式。在引入更複雜的最佳化之前,先定位瓶頸。
實作規則
- 重複使用請求中已有的資料。只要操作允許,就批次處理查詢、寫入與遠端呼叫。在實際限制處分割批次。檢查批量 API 的內部行為。並行的逐項呼叫仍會為每個項目產生一次往返。
- 根據存取模式選擇資料結構。掃描現有集合進行單一查詢。對於重複比對,建立一次鍵值對應表。將不變的解析與計算移出迴圈。在熱路徑上,消除重複排序、大型複製以及未使用的中間集合。在程序內傳遞現有值,而非透過 JSON 進行轉換以在相同形狀之間轉換。
- 在外部輸入進入的地方進行解析與驗證。內部函數可以使用進入點已檢查過存在性、型別或範圍的值。在加入防禦性分支之前,先識別可達的輸入以及該分支要防止的錯誤。在程式碼可以復原、加入有用上下文或將其轉換為不同錯誤合約的地方捕獲錯誤。
- 盡可能在讀取或寫入謂詞中包含所有權。透過受信任的模組、排程器與執行器傳遞已驗證的任務身份、所有權與參數。同一個任務內的交握、回呼或委派本身不需要另一個檢查或查詢。當涉及新的輸入或獨立的信任邊界時,驗證接收方無法繼承的保證。在依賴可變條件的寫入上,原子性地執行可變條件,例如餘額、先前狀態與冪等性。
- 使用合適的框架預設值,或在其歸屬處定義一次固定規則。僅針對真正的部署差異、獨立的調優需求或明確的使用者請求加入配置設定。優先使用現有的配置或機密儲存。僅在現有機制無法滿足需求時才建立檔案。僅在請求時加入功能開關。
- 優先使用唯一約束、條件寫入、原子遞增與短交易。在加入應用層鎖定之前,先識別競爭的操作、不正確的結果,以及為何現有機制無法防止它。鎖定最小資源最短時間。在移除現有鎖定之前,檢查每個寫入者以及任何後續結果。
- 保留存取規則、排序、分頁、部分成功語意、輸出品質與復原。與使用者討論行為或成本的重大變更。重用專案的中介軟體、測試進入點與驗收標準。
閱讀相關參考資料
驗證
- 在授權的測試環境中,透過實際應用程式進入點測試已修改的 API。檢查回應、受影響的呼叫者以及最終的業務狀態。修剪欄位時,檢查實際的負載,對於資料庫後端的路徑,還要檢查執行的 SQL。對於批次處理,比較小批次與全批次的查詢計數。當涉及副作用時,測試相關的競爭、重複請求或復原路徑。透過其正常進入點驗證背景作業與本地計算,並檢查其輸出。遵循專案要求的檢查與 CI。
- 使用者負責視覺與手動的 Web 驗收。交出頁面、操作與預期結果,並將該驗收標記為待處理。對前端變更執行相關的建置、型別或互動檢查。如果使用者委派瀏覽器測試,則涵蓋請求的範圍。
- 使用相同環境、等效資料與並發下的前後測量來支援加速聲明。記錄樣本數量與快取狀態。選擇能夠揭露所調查成本的指標,例如尾端延遲、吞吐量、查詢次數、掃描行數、傳輸位元組或尖峰記憶體。對於非同步工作,區分接受、佇列延遲與完成。將單次執行報告為單次執行。若無可比較的基準,僅報告所測量的內容。保持驗證與變更成比例。