小白接手前端專案

轉眼間轉職也快滿一年了,想分享一下這一年來維護舊專案的心得!

接手一份缺乏文件或註解的專案,是人人都有機會歷經的噩夢,因為很難馬上理解這些 magic number 的意圖,蠻有可能一改就爆炸。

這時需要先分析現況,擬定短、中、長期的解決方案,短期先以熟悉專案為主,之後再進行效能、架構方面的改善。

短期

以前端來說,我認為短期可以聚焦在使用者體驗相關的部分,包含:

  1. 操作回饋:給予使用者操作成功或失敗的提示
  2. 等待回饋:進度條、讀取動畫、按鈕禁用
  3. 頁面跳轉:閃爍、路由守衛、錯誤頁面、重載機制
  4. 點擊防禦:表單提交、報表匯入匯出的防抖、節流、狀態鎖
  5. 樣式:各種 CSS 屬性沒設好導致的問題

這些功能都集中在展示層(presentational,也是最容易改動的,不會涉及太多資料管理,好改就會立竿見影,可以拿來衝績效(喂)。

中期

處理過展示層後就能更快辨認 issue 類型是偏向展示層還是邏輯層(container)

邏輯層通常涉及比較多外部資料的整合,必須先梳理好資料流才能進行改善,例如我在工作上常遇到的案例有:

  1. 重複打出 API
  2. 多個頁面依賴同個 API 資料
  3. 狀態管理器將 UI 狀態跟資料狀態包在一起

這階段會偏向資料流與邏輯邊界的優化,搭配防抖和節流,可以預防很多效能問題。

但「正確地」梳理資料流不是簡單的事,如果能夠初步區分出展示層 / 邏輯層,相信勝過毫無準則地濫用工具。

資訊

展示層與邏輯層的概念可以參考:Container/Presentational Pattern


長期

現職 9 個月以來,我持續在做:

  1. 寫註解:
    補了一些我覺得很難懂的 side effect 的目的,註記各個元件的功能
  2. 導入 TypeScript:
    但也就是先導入,畢竟一千多個檔案不可能突然改好 XD
  3. 改善專案架構:
    原本的架構其實就是 Vite 自動建起來的那樣,很扁平,東西不會太難找,但缺乏一些分類準則,目前持續參考 FSD、原子設計等等的架構,用破壞性最小的方式慢慢改善
  4. 導入單元測試:
    針對一些資料重組或新加入的函式去測,我也沒有寫測試的經驗,所以後續還要研究元件的測試
  5. 可讀性改善:
    Code Spell Checker 先裝上去再說(?)。我會一塊一塊地讀程式碼,所以看到很多邏輯黏在一起沒有空行,實在蠻痛苦的

接下來也預計嘗試我在培訓時期還沒有做過的事,像是整合測試、E2E 測試等等。

升版本要做比較縝密的測試,雖然自己有拷貝一份來升升看,似乎沒什麼大問題,就是一些寫法或是底層實作已經被標記 deprecated 或是 removed,需要替換掉。

所以專案 build 成功,也不保證完全沒有地方壞掉,我可以確定一定有蠻多我沒測出來的問題。不過如果能慢慢把測試補上來,應該就可以考慮升版本了!

祝大家寫 code 快樂 🤣