淺談前端工程化

概述

web應用從本質上說就是一種運行在瀏覽器上的軟件裳朋,而這些軟件的圖形化用戶界面即為web前端。現(xiàn)如今吓著,web應用更加的復雜鲤嫡,例如社交網絡送挑,購物平臺,金融信貸等暖眼。這樣的應用惕耕,動輒就是幾十上百人一起開發(fā)并維護的,其前端界面的規(guī)模也極為龐大诫肠。與此同時司澎,web應用面對的用戶對于前端界面的要求也越來越多。因此栋豫,從軟件工程化的角度去思考前端開發(fā)是大勢所趨挤安。

傳統(tǒng)方式的不足和待解決的問題

以前,前端資源是按照頁面或類似業(yè)務頁面集合的形式進行組織丧鸯。例如蛤铜,manage.js對應著管理界面的交互;user.css對應著用戶界面的樣式丛肢,這種方式在很長一段時間內廣泛使用围肥。

存在的不足:

  • 前端頁面資源冗雜。頁面功能越來越多蜂怎,交互越來越復雜穆刻,前端代碼量增多。直接導致為了使用一個js中某個函數(shù)派敷,可能需要加載整個js文件蛹批,或者為了使用部分css樣式撰洗,需要加載其依賴的整個css篮愉,這樣無疑會增加請求,影響頁面性能差导。
  • 資源維護困難试躏。js和css等資源是依賴于頁面或者相似頁面集合,它們之間的依賴關系也只能通過人來維護设褐,容易出錯颠蕴,常出現(xiàn)刪除某個頁面但其相關的資源還存在的情況。
  • 不利于單元測試助析。以頁面為最小粒度進行資源整合犀被,不同功能的業(yè)務模塊相互影響,耦合度很高外冀,不利于進行自動化單元測試寡键。

工程化要解決的問題:

  1. 設計前端的架構
  2. 庫/框架的選型
  3. js/css模塊化開發(fā)
  4. 組件化開發(fā)
  5. 靜態(tài)資源智能化管理

前端工程化方案

前端架構

其中上有的React、Redux雪隧、ImmutableJs等框架為該架構的直接依賴西轩。下游為Business Components業(yè)務組件和Bussiness Modules業(yè)務模塊员舵,銜接上下游的,是基礎組件藕畔。

技術選型

場景 方案
開發(fā)語言 ES6+Jsx(React)
模塊化CSS Sass/Less
RemoteData FetchAPI
Routing(路由) react-router
I18n gettext方案
編譯打包 Babel+webpack
Lint Eslint
UT(單元測試) Mocha+chai+Sinon+Enzyme
Demo Server Nodejs

JS/CSS模塊化開發(fā)

模塊化最核心的價值在于解決不同文件之間的分工和調用問題马僻,及依賴關系。
JS模塊化方案有ES6 Module注服、AMD韭邓、CommonJS等。
CSS模塊化方案有l(wèi)ess祠汇,Sass仍秤,stylus等預處理器。

組件化開發(fā)

  • 頁面上的每一個獨立的可視/可交互的區(qū)域視為一個組件
  • 每個組件對應一個工程目錄可很,組件所需的靜態(tài)資源就近維護诗力。
  • 組件具有獨立性,組件之間自由組合我抠。
  • 頁面是組件的容器苇本,負責組合形成完整的界面。
名稱 說明 舉例
JS模塊 獨立的算法和數(shù)據單元 瀏覽器環(huán)境檢測(detect)菜拓,網絡請求(ajax)瓣窄,應用配置(config),DOM操作(dom)纳鼎,工具函數(shù)(utils)俺夕,以及組件里的JS單元
CSS模塊 獨立的樣式單元 柵格系統(tǒng)(grid),字體圖標(icon-fonts)贱鄙,動畫樣式(animate)劝贸,以及組件里的CSS單元
UI組件 獨立的可使/可交互單元 頁頭(header),頁尾(footer)逗宁,導航欄(nav)映九,搜索框(search)
頁面 UI組件的容器 首頁(index),列表頁(list)瞎颗,用戶管理(user)

整個web應用由多個頁面組成:


每個頁面由多個組件組成:

綜上所述件甥,大致可以規(guī)劃處源碼目錄:

靜態(tài)資源管理

使用Webpack作為前端資源模塊化管理和打包工具。Webpack把項目當作一個整體哼拔,通過給定的主文件(如:index.js)引有,Webpack將從這個文件開始找到你的項目的所有依賴文件,使用loaders處理它們倦逐,最后打包為一個(或多個)瀏覽器可識別的JavaScript文件譬正。


Webpack插件非常多,功能強大,此處不細說导帝。

性能優(yōu)化

  • CDN部署
  • 緩存控制
  • 文件指紋
  • 緩存復用
  • 請求合并
  • 按需加載
  • 同步/異步加載
  • HTTP2.0服務端資源推送
  • 移動端首屏CSS內嵌
  • 延遲加載
  • ... ...
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末守谓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子您单,更是在濱河造成了極大的恐慌斋荞,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虐秦,死亡現(xiàn)場離奇詭異平酿,居然都是意外死亡,警方通過查閱死者的電腦和手機悦陋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門蜈彼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俺驶,你說我怎么就攤上這事幸逆。” “怎么了暮现?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵还绘,是天一觀的道長。 經常有香客問我栖袋,道長拍顷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任塘幅,我火速辦了婚禮昔案,結果婚禮上,老公的妹妹穿的比我還像新娘电媳。我一直安慰自己踏揣,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布匆背。 她就那樣靜靜地躺著呼伸,像睡著了一般身冀。 火紅的嫁衣襯著肌膚如雪钝尸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天搂根,我揣著相機與錄音珍促,去河邊找鬼。 笑死剩愧,一個胖子當著我的面吹牛猪叙,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼穴翩,長吁一口氣:“原來是場噩夢啊……” “哼犬第!你這毒婦竟也來了?” 一聲冷哼從身側響起芒帕,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歉嗓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后背蟆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鉴分,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年带膀,在試婚紗的時候發(fā)現(xiàn)自己被綠了志珍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡垛叨,死狀恐怖伦糯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情嗽元,我是刑警寧澤舔株,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站还棱,受9級特大地震影響载慈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜珍手,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一办铡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琳要,春花似錦寡具、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至课幕,卻和暖如春厦坛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乍惊。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工杜秸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人润绎。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓撬碟,卻偏偏與公主長得像诞挨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呢蛤,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容