跳至主要内容

接手現有的前端專案時可以做什麼

· 閱讀時間約 5 分鐘

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

接手一份缺乏文件或註解的專案,可能是個人人都有機會歷經的噩夢,
因為很難馬上理解這些 magic number 的含意或整體的設計意圖,
怕隨意改動程式就造成破壞。

我們可以先分析 issue 類型,制定短、中、長期的解決方案,
短期以熟悉專案為主,而不要「大量」重構現有的業務邏輯,
因為有可能不小心刪減到某些功能,或者新加入的邏輯和原本的衝突了。

短期

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

  1. 操作回饋:如 CRUD 操作後給予使用者的提示、表單輸入格式錯誤的提示
  2. 等待回饋:如進度條、讀取動畫、按鈕禁用、骨架讀取
  3. 畫面跳轉:如閃爍、路由守衛、錯誤頁面、重載機制
  4. 防抖:如表單提交、報表匯入匯出
  5. 樣式:各種你想得到的 CSS 數值沒設好導致的問題

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

中期

修過專案內的展示層之後能更快辨認 issue 類型是偏向展示層還是邏輯層(container)。
邏輯層就需要介入比較多 API 串接的過程,
必須先梳理好資料流才能進行優化,我在工作上最常遇到的就是:

  1. 重複打出 API
  2. 多個頁面依賴同個 API 資料
  3. 狀態管理器的使用時機不明確,UI 狀態跟資料狀態沒有分離
  4. 精彩的 legacy

防抖和節流能在短期解決一部分使用者意外操作造成的效能消耗,
這階段會偏向資料流與邏輯邊界的優化但「正確地」梳理資料流不是容易的事,
如果能夠簡單地區分出展示層 / 邏輯層,相信勝過毫無準則地濫用工具。

參考:https://lnkd.in/gBQHiUJ2


長期

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

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

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

升版本要做比較縝密的測試,雖然自己有拷貝一份來升升看,
似乎沒什麼大問題,就是一些寫法已經被標記 deprecated,所以必須換掉,
而不是單純 build 有成功就好,我可以確定一定有蠻多我沒測出來的問題。

因為是商轉中的專案,自己也蠻怕升一升就壞了 XD 不過如果能慢慢把測試補上來,應該就可以考慮升版本了!

祝大家寫 code 快樂 🤣