1. 程式人生 > >重構構建的平凡之路

重構構建的平凡之路

server 清晰 https 瀏覽器 雙向 file 組合 分開 reload

歡迎大家前往騰訊雲社區,獲取更多騰訊海量技術實踐幹貨哦~

作者:李旦

導語

剛開始做前端的時候,一直以為切好頁面是重構的全部職責,在切好頁面的前提,增加頁面交互,這樣已經能到重構的頂峰。直到進入公司後發現參與的項目都有兩個特點,項目復雜和參與人數的多,發現傳統的方法已經不適用。主要介紹自己重構構建經歷,如有問題歡迎指教! 乀(ˉεˉ乀)

以往存在的問題

這裏介紹自己以往傳統重構的方法容易暴露的缺點。

  1. 編寫風格不統一,導致代碼可讀性差,增加後期維護成本與溝通成本;
  2. HTML和CSS代碼冗余,增加了重構開發成本和頁面打開速度;
  3. 項目開發周期長,缺少公共與私有框架的規劃,同樣會增加後期維護成本與開發成本,可復用性差;
  4. 項目文件部署雜亂,導致項目後期維護困難;
  5. 重構開發方法有優化提升空間;

重構構建的初步發展

在項目開始的時候,由於項目過大,支持重構的人越來越多了,這個時候大家討論出的一些方法有:定義統一的代碼規範、項目文件的合理部署、重構的方法優化、開發的自動化和重構架構的統一

實現方式:

  1. 重構文件的統一部署,區分開發環境和正式環境;
  2. 統一HTML和CSS代碼的命名方式,增加代碼的可讀性,減少溝通成本;
  3. 使用SASS抽離公共組件樣式的模塊,使得CSS的開發變得簡單可維護,使頁面可組合;
  4. 使用Compass,自動生成雪碧圖並且CSS同時生成背景坐標,提升重構效率;
  5. 編寫SASS公共方法,減少重復CSS代碼,提升重構效率(包括compass自帶方法函數);
  6. 結合gulp構建工具,對雪碧圖自動合並,sass生成,文件部署快速部署,項目的分類進行統一管理;

重構構建的深度擴展

主要是以項目2.0版本為基礎進行構建優化

第一個版本引出的問題:

  1. 因項目龐大,前期考慮不足,缺少顏色的配置方案,導致後期需要換膚功能無法支持,無法統一調整;
  2. 文件未做合並壓縮,增加了頁面的請求;
  3. 命名的統一雖然能解決代碼的可讀性,但是當代碼過多時,查看起來仍然令人眼花繚亂,同開發之間的對接也變得困難;
  4. 上傳不方便,強行增加聯調和測試的門檻;

主要圍繞在不提升web架構的復雜度,結合構建工具使頁面模塊化和組件化,優化重構的工作流程,同時節省重構與前端或者開發之間的對接時間,搭建屬於重構的管理系統增強重構對項目的管理能力

頁面皮膚配置

在項目2.0初期時候,提前與設計進行頁面換膚的顏色探討,重構的時候根據少數顏色結合sass的顏色函數,達到頁面整體的顏色配置。

技術分享圖片

後續有擴展空間,可以將配置放入管理端中,通過管理端傳入顏色的配置再進行編譯生成CSS文件。

LiveReload實現瀏覽器自動刷新

對頁面進行樣式更改之後,往往會多次刷新頁面查看效果,對頁面進行聯調的時候更能體現出自動刷新的重要性,往往一個細節會花很多時間

使用條件:

  1. 谷歌安裝LiveReload工具;
  2. 用http-server配置靜態服務器,打開網頁
  3. 執行配置好的gulp,並且打開谷歌LiveReload工具

優化:

因為LiveReload並不是特別好使用,所以用 Browsersync 來替代LiveReload,Browsersync的功能更全更方便。這裏好處我不一一列舉,可以查看 Browsersync官方文檔,有更詳細的介紹。

其中也遇到了一些問題,因為是HTML和CSS都是編譯生成,得需要去動態監聽生成文件的改變,進行自動刷新。

靜態頁面的模塊化、組件化

為什麽重構也要模塊化、組件化:

  1. 模塊強調分離,對重構而言,我們不能每次只寫自己的HTML做好自己的事,重構是提供整張頁面給前端或者後端,在龐大且復雜的項目中後續在開發頁面時,每增加一個模塊都需要和對接人員溝通清楚,可能還得指出具體位置;
  2. 組件強調復用,在重構新的頁面時,對公共組件部分還得進行再重構,增加了重構的開發時間;

技術分享圖片

實現方式:

  • HTML:Gulp-content-includer

將靜態HTML進行模塊化開發,當開發人員拿到重構頁面時候看到include模塊, 清晰的知 道頁面中引用了那些新模塊,直接去進行快速開發,同時會生成完整的靜態html便於查看效果。同時也避免了重構對公共組件的再重構,節省了重構制作靜態頁面的時間。利用gulp實現include雙向綁定,更改include同時會更新完整靜態html,並且瀏覽器會檢測更改自動刷新

技術分享圖片

  • CSS:SASS

CSS模塊通過SASS進行組件化區分,避免引用多余的組件樣式

技術分享圖片

搭建CSS和圖片管理系統

因為管理系統是自己獨自處理,所以還有很多待改進的地方,在能夠完成基礎功能的前提,後續繼續慢慢跟進。

技術分享圖片

為什麽要搭建管理後臺?

技術分享圖片

剛開始在項目初期的時候,我們在每次聯調或者重構完頁面時,都需要通過前端或者開發進行協助將CSS及圖片上傳到對應環境中,最後因為實在太麻煩,重構也開始使用跳板機進行環境的上傳。然後發現每次頁面在後期聯調維護的時候,因為上傳環境復雜,需要花很多沒必要的時間在跳板機上傳上,增加了工作量。

管理後臺有哪些功能?

  • 文件上傳
    整個管理後臺是以圖片和CSS的上傳與管理為基礎圍繞展開。

  • 文件壓縮
    包括CSS文件的壓縮,圖片的上傳進行自動壓縮,並且會將顏色配置的CSS和全局公共的CSS合並在同一個文件中,壓縮後文件命名以 項目名+min.css 組成,線上保證有一份源CSS同時還會有一個壓縮後CSS

為什麽不將CSS合並與壓縮功能做在gulp中,卻做到管理端上?

如果做到gulp中,會不方便後期的改版維護,在發布時,因為都是壓縮過的CSS代碼,不便和線上進行對比。雖然有SVN,但是為了保證一切以線上為主的基礎,還是會對線上的代碼進行對比。

  • 文件打印

用於打印CSS文件代碼,更方便的進行對比操作

技術分享圖片

最後

以上只是列舉了我個人在項目中重構構建歷程,主要是為了減輕重復勞動,提高效率。我們可以選擇更加適合自己的方案,而不是在追尋技術的路上迷失了方向。

最後的最後

各位大佬求輕吐!!!

相關閱讀

代碼自動生成在重構中的一次探索

重構代碼的Tricks

CSS 路徑動畫工具的誕生


此文已由作者授權騰訊雲技術社區發布,轉載請註明原文出處

重構構建的平凡之路