精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端項目重構(gòu)的深度思考和復(fù)盤

開發(fā) 前端
系統(tǒng)重構(gòu)是一個持續(xù)的過程, 我們不僅要有持續(xù)學(xué)習(xí)的態(tài)度, 還需要不斷的實踐和積累優(yōu)秀的最佳實踐, 這樣才能在不斷重構(gòu)中讓我們的系統(tǒng)不斷適應(yīng)復(fù)雜多變的“社會環(huán)境”.

hi, 大家好, 我是徐小夕, 今天和大家分享一下前端項目重構(gòu)的一些思考和復(fù)盤, 同時也是對自己多年項目研發(fā)經(jīng)驗的一個總結(jié).

一. 背景介紹

1. 我們?yōu)槭裁匆鲰椖恐貥?gòu)

項目重構(gòu)是每一家穩(wěn)定發(fā)展的互聯(lián)企業(yè)的必經(jīng)之路, 就像一個產(chǎn)品的誕生, 會經(jīng)歷產(chǎn)品試錯和產(chǎn)品迭代 一樣, 隨著業(yè)務(wù)或新技術(shù)的不斷發(fā)展, 已有架構(gòu)已無法滿足更多業(yè)務(wù)擴(kuò)展的需求, 所以只有通過重構(gòu)來讓產(chǎn)品“進(jìn)化”, 才能跟上飛速發(fā)展的時代浪潮.

圖片

這里我結(jié)合自己的實際經(jīng)驗總結(jié)一下項目重構(gòu)的幾個原因:

1. 技術(shù)因素

技術(shù)因素主要有如下幾個方面:

  • 早期技術(shù)團(tuán)隊在技術(shù)選型上的誤判(常發(fā)生于MVP類型的產(chǎn)品快速上線導(dǎo)致的技術(shù)調(diào)研不夠充分)
  • 新老技術(shù)框架的更替(比如從 jquery 遷移到 vue/react)
  • 技術(shù)團(tuán)隊交接出現(xiàn)的斷層(老技術(shù)團(tuán)隊的架構(gòu)設(shè)計更不上新技術(shù)團(tuán)隊的發(fā)展, 出現(xiàn)架構(gòu)上的“平替”)
  • 技術(shù)架構(gòu)升級(比如隨著業(yè)務(wù)發(fā)展, 由傳統(tǒng)的MPA應(yīng)用轉(zhuǎn)為基于微前端模式的SPA應(yīng)用)
  • 安全,性能,代碼質(zhì)量等原因?qū)е碌募夹g(shù)重構(gòu)

2. 產(chǎn)品因素

  • 產(chǎn)品形態(tài)調(diào)整(比如由純PC應(yīng)用轉(zhuǎn)為響應(yīng)式應(yīng)用, 或者從H5到支持跨端)
  • 產(chǎn)品業(yè)務(wù)調(diào)整(非常常見的重構(gòu)理由之一)
  • 產(chǎn)品指標(biāo)調(diào)整(如兼容性, 性能指標(biāo)等導(dǎo)致的代碼重構(gòu))

上面是我列出來的比較典型的重構(gòu)場景, 也是我們未來在設(shè)計產(chǎn)品技術(shù)架構(gòu)之前需要考慮的方面. 為了提高自己設(shè)計的架構(gòu)穩(wěn)定性, 我們需要提前和產(chǎn)品溝通明確, 以降低后期重構(gòu)和維護(hù)成本.

最后總結(jié)幾條架構(gòu)設(shè)計的經(jīng)驗:

  • 能做規(guī)范的一定要嚴(yán)格做好規(guī)范
  • 在設(shè)計架構(gòu)之前, 一定要充分理解業(yè)務(wù)場景, 明確產(chǎn)品的技術(shù)交付指標(biāo)
  • 架構(gòu)設(shè)計以可溯源 為基本要求
  • 不要盲目追求最好的方案, 以局部最優(yōu)解為工程設(shè)計理念

2. 做項目重構(gòu)之前, 需要有哪些準(zhǔn)備

當(dāng)然做項目重構(gòu)也是有技術(shù)門檻的,不是所有程序員都能做好重構(gòu)工作, 建議大家具備如下幾種技術(shù)能力:

  • 對項目所使用的框架語言有相對深入的理解和掌握
  • 有一定的前端工程化經(jīng)驗(如webpack, vite, gulp, nodejs, babel, AST等有一定的研究)
  • 熟悉常用的web性能優(yōu)化方案
  • 熟悉常見的設(shè)計模式和前端編碼規(guī)范
  • 熟悉前端主流的技術(shù)框架的設(shè)計原理和工程設(shè)計思想

接下來我們一起看看常見的幾種項目重構(gòu)場景及其重構(gòu)方向.

二. 不同類型項目重構(gòu)的方法論

圖片

1. 業(yè)務(wù)系統(tǒng)自身的重構(gòu)

業(yè)務(wù)系統(tǒng)自身的重構(gòu)一般可以包含如下幾個方面:

  • 業(yè)務(wù)代碼優(yōu)化

業(yè)務(wù)代碼優(yōu)化主要是針對一些核心業(yè)務(wù)代碼, 進(jìn)行流程上, 邏輯上的重構(gòu), 讓它更具可讀性和維護(hù)性, 同時保證業(yè)務(wù)操作的兼容性, 具體方案如下:

  • 復(fù)雜業(yè)務(wù)邏輯需要編寫注釋
  • 代碼中訪問性屬性提供兼容邏輯(常見的比如訪問對象屬性, a.b.c, 如果a,b為非對象則整段代碼將報錯)
  • 代碼結(jié)構(gòu)優(yōu)化(比如冗長的if else 或者“回調(diào)地獄” 可以采用適配器模式或者es6+語法來優(yōu)化)
  • 方法參數(shù)調(diào)優(yōu)(一個函數(shù)有多個參數(shù), 可以使用參數(shù)對象來提高可讀性,降低使用偏差)
  • 業(yè)務(wù)代碼性能優(yōu)化(復(fù)雜后臺系統(tǒng)比如低代碼類產(chǎn)品, 前端需要處理很多數(shù)據(jù)和邏輯, 此時可以用合適的數(shù)據(jù)結(jié)構(gòu)和算法優(yōu)化js計算)
  • 函數(shù)式編程思想優(yōu)化業(yè)務(wù)函數(shù)(可選)
  • 業(yè)務(wù)代碼進(jìn)行單元測試, 提高代碼質(zhì)量(可選)
  • 代碼規(guī)范

早期可能由某名研發(fā)單獨負(fù)責(zé)的項目, 對代碼規(guī)范和格式要求不是很高, 但是需要考慮后期團(tuán)隊擴(kuò)容帶來的協(xié)作開發(fā)問題, 這個時候如果沒有統(tǒng)一的規(guī)范, 不同研發(fā)小伙伴可能寫出的代碼千奇百怪, 導(dǎo)致后期維護(hù)成本巨大, 尤其是涉及到需要維護(hù)他人代碼時. 所以我們重構(gòu)的另一個目標(biāo)就是降低代碼理解成本, 保證項目代碼在閱讀時就像同一個寫出來的, 這樣對后期邏輯復(fù)用, 組件解耦, 問題定位以及業(yè)務(wù)代碼維護(hù)將非常有幫助.

常用的措施有:

  • 代碼格式規(guī)范(如eslint)
  • 邏輯語法類型約束(如typescript)
  • 代碼規(guī)范(如css命名規(guī)范OOCSS, BEM等, 文件命名規(guī)范, js變量命名復(fù)規(guī)范等)
  • git 提交規(guī)范(常見的是在git hooks的提交階段對提交格式等進(jìn)行校驗)

當(dāng)然, 這些都是需要結(jié)合自身團(tuán)隊和項目來定的, 這里只做參考.

  • 工程化優(yōu)化

工程化優(yōu)化主要有以下幾個場景:

  • 由于業(yè)務(wù)不斷增加, 系統(tǒng)的復(fù)雜性加大導(dǎo)致的本地運(yùn)行和打包速度越來越慢
  • 由于項目代碼量的增加導(dǎo)致頁面臃腫, 需要進(jìn)行合理的拆分
  • 基于已有的工程經(jīng)驗沉淀, 需要對工程化配置做進(jìn)一步升級, 優(yōu)化
  • 老舊腳手架無法適應(yīng)當(dāng)前的項目生產(chǎn)效率

接下來我會針對以上場景, 進(jìn)行一些解決方案的分享.

  1. 由于業(yè)務(wù)不斷增加, 系統(tǒng)的復(fù)雜性加大導(dǎo)致的本地運(yùn)行和打包速度越來越慢

針對這種情況, 我們可以借助 speed-measure-webpack-plugin? 插件,它可以分析 webpack? 的總打包耗時以及每個 plugin? 和 loader 的打包耗時,從而讓我們對打包時間較長的部分進(jìn)行針對性優(yōu)化。

同時默認(rèn)情況react?, react-dom?, react-router? 等公共模塊在每次構(gòu)建都會參與打包, 這些實際上是沒有必要的, 我們可以將其傳到 cdn?上, 從而減少webpack 的打包”工作量“.

我們可以安裝 html-webpack-externals-plugin 來實現(xiàn)將指定模塊從打包列表中排除, 具體用法如下:

const HtmlWebpackExternalsPlugin = require('html-webpack-externals-plugin');

module.exports = {
// ...其他配置代碼
plugins: [
new HtmlWebpackExternalsPlugin({
externals: [
{
module: 'react',
entry: 'https://cdn.dooring.cn/umd/react.production.min.js',
global: 'React',
},
{
module: 'react-dom',
entry:
'https://cdn.dooring.cn/umd/react-dom.production.min.js',
global: 'ReactDOM',
},
],
}),
],
};

為了追求更驚一步的打包效率, 我們可以使用并行的方式構(gòu)建, 同樣 webpack? 生態(tài)也提供了對應(yīng)的模塊 parallel-webpack.  具體用法大家可以看文檔, 非常簡單方便.

其他還有很多優(yōu)化的方案, 這里我列一下, 大家可以根據(jù)實際情況使用:

  • 配置并行壓縮(terser-webpack-plugin, css-minimizer-webpack-plugin, html-minimizer-webpack-plugin 等都支持parallel參數(shù))
  • 預(yù)編譯資源模塊(可以利用webpack.DllPlugin來提前將公共模塊打包以便后續(xù)直接復(fù)用)
  • 使用構(gòu)建緩存(webpack5 內(nèi)置的 cache 模塊, 或者cache-loader)
  • 對打包體積進(jìn)行分析, 以便有針對性的優(yōu)化(如webpack-bundle-analyzer)

當(dāng)然除了對已有構(gòu)建工具的優(yōu)化, 我們可以評估一下重構(gòu)成本, 將構(gòu)建內(nèi)核替換vite等更高效的構(gòu)建工具.

  1. 由于項目代碼量的增加導(dǎo)致頁面臃腫, 需要進(jìn)行合理的拆分

針對項目代碼量的增加導(dǎo)致頁面臃腫, 我們可以從項目本身的角度, 對項目進(jìn)行拆解, 將公共模塊抽離為公用業(yè)務(wù)類庫或者組件庫:

圖片

除了對項目進(jìn)行可復(fù)用性拆分之外, 我們還需要根據(jù)系統(tǒng)復(fù)雜量級, 近一步拆分項目, 比如將一個巨石工程拆分為多個子工程, 單獨運(yùn)行維護(hù), 或者采用之前熱點討論的微前端的模式, 比如使用 qainkun?, single-spa?, Micro App?, EMP?, Garfish?, Bit 這些優(yōu)秀的微前端框架.

綜上, 我們可以根據(jù)項目復(fù)雜度, 做如下優(yōu)化:

  • 模塊 & 組件化
  • 拆分子系統(tǒng)(已有架構(gòu)不變的MPA模式)
  • 拆分子系統(tǒng)(微前端)

當(dāng)然我們始終需要保持一個理念: 局部最優(yōu), 誤增繁復(fù).

  1. 基于已有的工程經(jīng)驗沉淀, 需要對工程化配置做進(jìn)一步升級, 優(yōu)化

這種情況主要是在項目發(fā)展穩(wěn)定之后, 需要思考的重構(gòu)方向, 比如早期由于業(yè)務(wù)場景單一, 很多公共配置都寫在業(yè)務(wù)代碼里的, 隨著業(yè)務(wù)復(fù)雜之后, 很多模塊都需要使用改配置或者變量, 比如:

// a.js
const publicDomain = 'https://dooring.vip';
const serverUrl = 'https://xxx.cn';

// b.js
const publicDomain = 'https://dooring.vip';

// c.js
const appid = 'xxxxxxxx';
const website_Logo = 'http://h5.dooring.cn/logo.png';

對于這種零散且固定的變量, 未來可能會被多個頁面或者模塊復(fù)用, 所以為了降低成本, 我們可以把這些通用配置提取到外層, 作為公共配置文件, 這樣后期新項目也能享受開箱即用的配置體驗.

拿我的親身經(jīng)驗, 比如幾年前我開發(fā)的低代碼項目H5-Dooring, 有一些零散的配置信息分散在項目的各個角落, 后面經(jīng)過幾次重構(gòu)優(yōu)化之后, 整個項目只需要在配置文件中輕松配置內(nèi)容, 即可一鍵控制頁面的走向, 這里分享一下優(yōu)化過后的配置文件:

// h5-dooring全局配置文件
define: {
START_ENV,
lang,
// 配置h5端訪問的域名
h5Domain: 'h5.dooring.cn',
// 設(shè)置當(dāng)前版本號
curVersion: dooringVersion,
// 備案信息
copyright: 'xxxxx-3',
// 是否顯示更新彈窗
showUpdateModal: true,
// 更新日志
updateList: [
"1. 新增表格組件",
"2. 國際化優(yōu)化",
"3. 表單詳情頁支持內(nèi)部滾動",
"4. 個人圖片庫性能優(yōu)化",
"5. 下載代碼功能優(yōu)化"
],
// 網(wǎng)站logo地址
logo: 'http://cdn.dooring.cn/dr/logo.ff7fc6bb.png',
// 入口頁面是否展示贊助品牌和版權(quán)提示
showAdsAndTip: true,
// 登錄時獲取登錄碼的二維碼
qrcode: 'http://cdn.dooring.cn/dr%2Fcode1.png',
// 友情鏈接展示
friendLinks: [
{
name: 'V6',
link: 'http://v6.dooring.cn/beta',
title: '可視化大屏編輯器'
},
{
name: 'Power',
link: '/powernice',
title: '文檔編輯器'
}
],
// 默認(rèn)語言
defaultLocale: 'zh-CN',
langMap: langMap
},

這樣, 我們的工程化結(jié)果就可以讓不同的技術(shù)小伙伴輕松的享受, 讓項目創(chuàng)建的成本和自由度得到極大的提升.

  1. 老舊腳手架無法適應(yīng)當(dāng)前的項目生產(chǎn)效率

圖片

對于這種場景, 我們就需要對腳手架自身有更多的研究和了解, 比如熟悉webpack?設(shè)計思想, 熟悉babel?的工作流程, 熟悉 nodejs 開發(fā)工具鏈的一些模式等, 這里分享幾個比較成熟的先進(jìn)腳手架, 大家如果覺得老項目工程比較老舊, 可以往這幾個方向重構(gòu):

  • 基于webpack5.0的項目腳手架
  • vite
  • umi4.0

如果大家對以上三種之一比較熟悉, 也可以基于他們二次封裝成符合自身業(yè)務(wù)場景的DIY項目工具.

  • 渲染層優(yōu)化

渲染層優(yōu)化主要表現(xiàn)在產(chǎn)品的體驗上, 比如:

  1. 提高首屏加載速度
  2. 白屏體驗優(yōu)化
  3. 大數(shù)據(jù)列表渲染優(yōu)化
  4. api請求優(yōu)化
  5. 動畫性能優(yōu)化
  6. dom過載導(dǎo)致的頁面卡頓優(yōu)化

以上是我之前遇到的一些渲染優(yōu)化的維度, 接下來和大家一一介紹解決思路.

1. 提高首屏加載速度

有很多方法可以幫助我們提高首屏加載速度, 比如:

  • 靜態(tài)資源放cdn, 提高不同地域用戶訪問資源的速度
  • 頁面或路由懶加載, 降低首次加載單一頁面的代碼體積
  • 靜態(tài)資源(如圖片, 視頻等)懶加載
  • 資源壓縮(比如開啟gzip模式)

當(dāng)然還存在很多客觀因素, 比如用戶所在區(qū)域為弱網(wǎng)環(huán)境, 我們可以根據(jù)網(wǎng)速提供一個最小化弱網(wǎng)可替代頁面, 來保證我們網(wǎng)站的可用性和可訪問性.

2. 白屏體驗優(yōu)化

對于白屏優(yōu)化, 也有很多成熟的例子, 比如采用骨架屏:

圖片

如果我們的項目是基于 vue-cli? 構(gòu)建的,那么可以使用比較成熟的的 page-skeleton-webpack-plugin? 方案,否則我們?nèi)匀豢梢赃x擇 vue-router? 提供的 vue-server-renderer.

當(dāng)然你的項目是使用react?的, 也可以輕松使用如 react-content-loader 這樣的svg方案來定制自己的骨架屏.

除了骨架屏之外, 我們還可以提供一個模版頁面或者加載動畫, 以便在頁面加載完成之前給用戶一個優(yōu)雅的過渡提示. 比如:

圖片

3. 大數(shù)據(jù)列表渲染優(yōu)化

對于一些中后臺復(fù)雜的系統(tǒng)模塊, 可能會涉及到一次渲染大量列表項或者多級組織樹的情況:

圖片

尤其是在大公司或者大集團(tuán)中出現(xiàn)的頻率非常高, 這種情況我們就需要用到虛擬列表或者節(jié)點懶加載的方式了. 虛擬列表應(yīng)用非常廣泛, 目前也有幾個成熟的方案大家可以直接使用:

  • vue virtual scroll list
  • react-virtualized
  • rc-virtual-list

如果你的項目目前還好沒有使用這種方案, 不妨評估一下, 是否可以用這些方案為自己項目保駕護(hù)航.

圖片

4. api請求優(yōu)化

api 請求優(yōu)化主要正對這種場景: 頁面的渲染依賴于某個或者某些請求的完成, 或者由于某個頁面請求量過大導(dǎo)致每次重新進(jìn)入頁面都需要造成一定的性能開銷.

對于這兩種情況, 其實不僅僅是對瀏覽器渲染有影響, 還會極大的增加服務(wù)器的壓力, 所以我們需要對請求或者頁面進(jìn)行一定范圍的緩存.

比如說我們可以把不長變動的請求數(shù)據(jù)存在 indexedDB 中, 當(dāng)?shù)诙卧L問直接可以從 indexedDB 中拿到請求數(shù)據(jù), 這樣既降低了服務(wù)器壓力, 也提高了二次渲染的效率.

其次我們可以對部分頁面做路由緩存, 避免每次切換都重新渲染, 當(dāng)然這只針對于不需要實時更新數(shù)據(jù)的頁面而言. 我之前也分享了一篇瀏覽器緩存接口實戰(zhàn)的文章, 大家感興趣的可以學(xué)習(xí)參考, 對于 indexedDB, 我封裝了一個開箱即用的庫, 大家可以直接使用:

github地址: https://github.com/MrXujiang/xdb

5. 動畫性能優(yōu)化

這也是個老生常談的問題, 這里直接分享幾個方案:

  • 優(yōu)化精簡 DOM 結(jié)構(gòu),合理布局
  • 使用 transform 代替 left,top 減少使用引起頁面重排的屬性
  • 開啟硬件加速(比如設(shè)置transform: translateZ(0) 或者transform: translate3d(0, 0, 0))
  • 盡量避免瀏覽器創(chuàng)建不必要的圖形層
  • 盡量減少 js 動畫,如需要,使用性能更友好的requestAnimationFrame
  • 使用 chrome performance 工具調(diào)試動畫性能

由于dom動畫有上限很低, 所以對于一些更復(fù)雜的動畫渲染, 我們可以采用 svg? 或者 canvas? 來代替, 以降低 dom 對瀏覽器內(nèi)存的占用.

6. dom過載導(dǎo)致的頁面卡頓優(yōu)化

一個頁面如果dom數(shù)量過多, 會產(chǎn)生很多問題, 一方面會使得瀏覽器內(nèi)存占用過高, 導(dǎo)致其他不相關(guān)的js邏輯操作進(jìn)行阻塞或者失效, 表現(xiàn)就是頁面卡頓或者無響應(yīng).

為了解決這個問題我們?nèi)匀豢梢允褂锰摂M滾動的方案或者懶加載的方案, 保證用戶當(dāng)前屏幕下的dom?在一個合理的范圍內(nèi), 如果是無法避免必須要展示大段dom?元素, 我們可以用一個單獨的頁面來承載或者嵌入, 避免頁面其他部分宕機(jī). 也可以對復(fù)雜dom 進(jìn)行局部“冷凍”(在非激活狀態(tài)將其轉(zhuǎn)化為圖片, 激活時在逐漸渲染)

  • 產(chǎn)品需求層優(yōu)化

產(chǎn)品需求層面導(dǎo)致的重構(gòu)主要場景比如:

  • 項目國際化支持
  • 項目埋點
  • 整體項目UI升級

當(dāng)然還有很到場景這里不一一介紹了. 以上列的場景都是比較常見的, 而且也有很多解決方案, 后期我會一一復(fù)盤. 我們在項目重構(gòu)之前或者立項之前, 這幾種情況也是需要重點考慮的, 畢竟都是大工作量的任務(wù).

2. 技術(shù)升級帶來的重構(gòu)

技術(shù)升級帶來的重構(gòu)主要有前端框架的升級, 前端設(shè)計模式的升級, 腳手架的升級. 后面兩個主要是圍繞前端技術(shù)的不斷演進(jìn), 我們采取的程序性升級, 比如從傳統(tǒng)的 gulp? 升級到 webpack?, 或者從 webpack? 升級到vite? 等. 前者比較常見的場景是企業(yè)中有很多老的系統(tǒng), 采用的是比較傳統(tǒng)的技術(shù)方案如 CMD 模式 + jquery?, 但是新項目采用的是 webpack + vue 或者 react, 此時我們需要更新項目情況來有選擇的做重構(gòu):

  1. 老項目只需要少量維護(hù)的情況

這種情況我們就不需要大刀闊斧的重新用新框架再寫一套了, 我們只需要在重構(gòu)時, 對老項目代碼做好足夠的注釋, 類庫的封裝即可:

圖片

其次我們需要做好js?變量隔離, 因為傳統(tǒng)模式我們會在 window? 頂層定義大量 var? 全局變量, 作為優(yōu)化的一部分, 我們可以采用閉包自執(zhí)行和變量約定來規(guī)范我的js變量定義,  以防止全局的變量污染.

  1. 老項目仍然需要不斷迭代, 并且后期會有新的模塊

這種情況我們需要做評估和拆分, 如果是小模塊, 我們可以用 jquery插件? 的方式快速爹迭代, 如果是頁面級別的迭代, 并且交互比較復(fù)雜, 我們可以將老系統(tǒng)的新頁面拆離一個子工程, 采用最新的框架(如vue)來開發(fā)迭代, 再通過 MPA 的方式和老系統(tǒng)做集成:

圖片

  1. 老項目和新項目需要相互通信, 嵌套

這種場景下最好的方式就是用iframe + postmessage, 或者我們可以參考類似微前端的方式來管理組織不同子系統(tǒng).

3. 組件庫重構(gòu)

圖片

對于一個包含很多子系統(tǒng)的復(fù)雜的項目系統(tǒng)來說,要想設(shè)計一個好的架構(gòu),第一步就是合理劃分組件,組件的粒度拆成的足夠細(xì),這樣才能最大限度的復(fù)用組件。

對于任何一個復(fù)雜系統(tǒng)來說,最重要的就是實現(xiàn)錯綜復(fù)雜的業(yè)務(wù)功能,但是不同模塊或者子系統(tǒng)之間很多業(yè)務(wù)往往是相通的或者相似的,如果這個時候我們每個頁面對于實現(xiàn)類似的業(yè)務(wù)場景都去重復(fù)去寫一遍業(yè)務(wù)代碼,那完全是沒必要的,對于可維護(hù)性來說也是一種打擊,所以基于這種場景我們的 業(yè)務(wù)組件 就很有必要出場了。我們可以把功能或者需求類似的有機(jī)體封裝成一個業(yè)務(wù)組件,并對外暴露接口來實現(xiàn)靈活的可定制性,這樣的話我們就可以再不同頁面不同子系統(tǒng)中復(fù)用同樣的邏輯和功能了。

同理,不同頁面中往往有可能出現(xiàn)視覺或者交互完全相同或者類似的區(qū)塊,為了提高可復(fù)用性和提高開發(fā)效率,我們往往會基于基礎(chǔ)組件和業(yè)務(wù)組件再進(jìn)行一次封裝,讓其成為一個獨立的區(qū)塊以便直接復(fù)用。

通過這樣一層層封裝,我們就逐漸搭建了一套完整的組件化系統(tǒng),基于這種模式的開發(fā)往往也是一個好的前端架構(gòu)的開始。但要注意一點就是高層次的組件一定會依賴低層次的組件,但是低層次的組件不可以包含高層次的組件。(聽起來有點像rudex的單向數(shù)據(jù)流法則),他們的關(guān)系就好像下圖:

圖片

所以對組件庫的重構(gòu)需要對我們的項目有一個本質(zhì)的認(rèn)知, 并對頁面進(jìn)行有效的拆分, 從而達(dá)到局部的最優(yōu), 降低后續(xù)的維護(hù)成本, 并能提高整個系統(tǒng)甚至跨系統(tǒng)的復(fù)用.

圖片

有關(guān)如何從0到1教你搭建前端團(tuán)隊的組件系統(tǒng) 我之前也寫過詳細(xì)的文章, 大家可以參考學(xué)習(xí)一下.

總結(jié)

系統(tǒng)重構(gòu)是一個持續(xù)的過程, 我們不僅要有持續(xù)學(xué)習(xí)的態(tài)度, 還需要不斷的實踐和積累優(yōu)秀的最佳實踐, 這樣才能在不斷重構(gòu)中讓我們的系統(tǒng)不斷適應(yīng)復(fù)雜多變的“社會環(huán)境”.

責(zé)任編輯:武曉燕 來源: 趣談前端
相關(guān)推薦

2023-10-20 08:04:34

系統(tǒng)重構(gòu)實踐

2021-08-11 08:23:07

前端技術(shù) iframe

2020-02-26 09:00:30

程序員技能開發(fā)者

2022-04-05 13:56:48

設(shè)計模式javascript

2020-11-09 09:10:31

javascript設(shè)

2010-12-29 09:51:29

前端基礎(chǔ)框架

2025-08-29 16:24:37

2022-08-08 13:24:28

整潔架構(gòu)架構(gòu)前端

2011-12-01 14:06:32

2023-12-01 08:09:08

2017-06-27 14:49:20

深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2019-11-15 17:51:41

索貝超高清

2020-09-28 06:45:42

故障復(fù)盤修復(fù)

2021-04-21 07:37:19

JVM復(fù)盤 日志

2021-05-26 10:40:28

Vue3TypeScript前端

2020-12-08 06:20:49

前端重構(gòu)Vue

2018-05-23 14:58:38

云計算

2022-03-16 07:59:54

項目語言包JSON 文件

2011-04-13 14:04:14

Java數(shù)組

2019-04-22 09:00:38

點贊
收藏

51CTO技術(shù)棧公眾號

国产成人美女视频| 91po在线观看91精品国产性色| 精品国产成人av在线免| 色吊丝在线永久观看最新版本| 特级黄色录像片| 国产欧美一级片| 黄色欧美成人| 日韩欧美123| 日韩a∨精品日韩在线观看| 五月婷在线视频| 日韩成人午夜电影| 久久综合五月天| 扒开伸进免费视频| 热三久草你在线| 久久女同互慰一区二区三区| 国产日韩综合一区二区性色av| 天天操天天操天天操天天操天天操| 日韩激情综合| 日韩欧美国产视频| 一区二区三区国产福利| 亚洲国产成人在线观看| 鲁大师成人一区二区三区| 在线视频欧美日韩| av在线免费观看不卡| 国产免费拔擦拔擦8x在线播放 | 亚洲91精品在线| 欧美黑人欧美精品刺激| 久久久久黄色| 香蕉影视欧美成人| 亚洲一区二区三区四区中文| 黑人操亚洲女人| 美女视频一区二区| 国模视频一区二区三区| 国产精久久一区二区三区| 精品中文字幕一区二区三区四区| 精品福利一区二区| 裸体大乳女做爰69| 韩日视频在线| 粉嫩一区二区三区性色av| 国产成人av网址| 四虎永久在线精品| 亚洲欧美综合| 中文字幕精品在线视频| 亚洲欧美在线不卡| 亚洲成人黄色| 欧美福利视频一区| 欧美 日韩 国产 高清| 免费看a在线观看| 国产亚洲精品aa午夜观看| 国产精品久久久久免费| 国产精品呻吟久久| 男女性色大片免费观看一区二区 | 西西人体一区二区| 久久久久久国产免费| 在线免费看av网站| 无码少妇一区二区三区| 欧美哺乳videos| 午夜免费看视频| 成人免费影院| 黑人巨大精品欧美一区二区三区| 嫩草影院中文字幕| 黄网址在线观看| 国产精品不卡在线观看| 欧美成人一区二区在线| 少妇高潮一区二区三区99小说| 国产美女视频91| 成人精品在线观看| 亚洲无码久久久久| 久久99国产精品尤物| 国产欧美日韩精品专区| 波多野结衣一区二区三区四区| 国产欧美在线| 欧美有码在线视频| 69成人免费视频| 久久久久久自在自线| 国外色69视频在线观看| 欧美日韩综合在线观看| 日韩一级欧洲| 性色av一区二区三区| 国产在线拍揄自揄拍无码视频| 欧美日韩国产免费观看| 欧美日韩福利电影| 久久无码精品丰满人妻| 影视亚洲一区二区三区| 久久综合电影一区| 久久久久久福利| 亚洲精品九九| 国产成人高潮免费观看精品| 欧美a视频在线观看| 日韩av二区在线播放| 国产精品成av人在线视午夜片| 中文字幕在线天堂| 蜜桃一区二区三区在线| 成人写真福利网| www.黄色小说.com| 国产成人精品亚洲777人妖| 国产精品美女黄网| 欧美男男同志| 国产精品成人一区二区艾草 | 国产免费av在线| 国产精品美女久久久久久久久久久| 樱花www成人免费视频| 伊人影院蕉久影院在线播放| 精品久久久久久久久久 | 视频一区国产视频| 国产成人精品999| 国产又大又黄又爽| 成人国产精品免费观看| 欧美极品一区| 国产精品剧情一区二区在线观看| 亚洲国产你懂的| 国产精品99久久免费黑人人妻| 欧美伊人亚洲伊人色综合动图| 日韩一区二区三区电影| 久久国产精品无码一级毛片| 爽成人777777婷婷| 久久精品视频免费播放| 男女啊啊啊视频| 久久国产剧场电影| 精品日产一区2区三区黄免费 | 日韩电影大全网站| 欧美一级视频精品观看| 色欲av无码一区二区三区| 婷婷激情综合| 奇米四色中文综合久久| 国产草草影院ccyycom| 久久理论电影网| 国产一级不卡视频| av成人在线看| 精品香蕉一区二区三区| 男的操女的网站| 日本午夜一本久久久综合| 99国产在线视频| 免费大片黄在线| 欧美日韩免费在线观看| 美女被艹视频网站| 精品午夜久久| 欧美有码在线观看| 手机av免费在线观看| 国产视频一区不卡| 免费一级特黄毛片| 亚洲三级av| 久久视频国产精品免费视频在线| 无码人妻av免费一区二区三区| 国产激情91久久精品导航 | 一区二区三区不卡在线观看 | 一级毛片视频在线| 欧美日韩中文字幕| 三大队在线观看| 五月久久久综合一区二区小说| 国产精品白丝jk喷水视频一区 | 成年人免费观看视频网站| 欧美视频四区| 97超级碰碰| av网站免费在线观看| 欧美三级乱人伦电影| 男人操女人动态图| 香蕉久久a毛片| 久久艹中文字幕| 蜜桃视频在线观看免费视频| 日韩午夜激情免费电影| 免费在线观看a级片| 精品综合久久久久久8888| 亚洲春色综合另类校园电影| 国产精品扒开腿做爽爽爽视频软件| 亚洲成人久久久| 国产性猛交普通话对白| 美女网站色91| 中文字幕在线亚洲精品| 免费一区二区三区四区| 日韩专区在线播放| 中文字幕欧美色图| 国产精品成人在线观看| 国产三级国产精品国产专区50| 成人激情在线| 国产精品日韩在线播放| 69久久久久| 欧美久久高跟鞋激| 日本少妇高清视频| 国产精品白丝jk黑袜喷水| 手机在线视频你懂的| 国产精品一站二站| 欧美高清videos高潮hd| 刘玥91精选国产在线观看| 欧美日韩国产页| 国产精品免费无码| 精品一区精品二区高清| 精品国产三级a∨在线| 精品精品视频| 91产国在线观看动作片喷水| 色在线免费视频| 欧美三级三级三级爽爽爽| chinese全程对白| 成人综合在线视频| 日韩欧美国产免费| 精品日韩一区| 亚洲最大av网| 五月天av在线| 中文字幕亚洲欧美在线| 亚洲视频在线免费播放| 一区二区三区高清| 性欧美精品中出| 韩国一区二区三区| 国产无限制自拍| 欧美亚洲激情| 国产91aaa| 小黄鸭精品aⅴ导航网站入口| 日韩在线www| 亚洲精品中文字幕成人片| 日本韩国欧美在线| 国语对白在线播放| 久久女同精品一区二区| 天美一区二区三区| 亚欧美中日韩视频| 亚洲天堂电影网| 欧美亚洲tv| 亚洲一区二区久久久久久| 日本午夜大片a在线观看| 国产一区二区动漫| 黄色aaa毛片| 欧美剧情片在线观看| 精品少妇theporn| 国产日韩欧美一区二区三区乱码 | 色欲欲www成人网站| 中文日韩在线| 欧美一级中文字幕| 无码日韩精品一区二区免费| 91一区二区三区| 成人国产一区| 久久久久国产精品www| 国产美女性感在线观看懂色av| 精品捆绑美女sm三区| 正在播放亚洲精品| 色综合久久久久久久| 久久久久亚洲AV| 国产精品国产三级国产有无不卡 | 亚洲视频一区二区在线观看| 三级网站在线免费观看| 国内久久精品视频| 久久久精品三级| 老司机免费视频久久| 波多野结衣之无限发射| 午夜欧美视频| 亚洲资源在线网| 红桃成人av在线播放| 97中文在线观看| 亚洲国产天堂| 国产精品自产拍在线观看| 丝袜美腿诱惑一区二区三区| 性日韩欧美在线视频| av美女在线观看| 欧美色倩网站大全免费| 亚洲第一网站在线观看| 在线免费观看日本欧美| 日韩欧美国产另类| 欧美日韩在线播放| 97人妻精品一区二区三区| 538prom精品视频线放| www.日本在线观看| 精品久久久久久无| 天堂а√在线8种子蜜桃视频| 国产视频精品va久久久久久| 国产小视频免费在线观看| 一区二区成人av| 黄色成年人视频在线观看| 欧美黑人性生活视频| 丝袜诱惑一区二区| 国产91色在线|免| 在线欧美激情| 国产精品嫩草在线观看| 亚洲午夜久久| 一本一道久久久a久久久精品91 | 久久夜色精品国产欧美乱极品| 精品成人av一区二区三区| 中文字幕在线观看不卡| 久久午夜鲁丝片午夜精品| 色综合久久天天| 国产精品自产拍| 精品香蕉一区二区三区| 免费黄网在线观看| 97在线视频免费观看| 国产精品久久乐| 国产精品xxxx| 欧美色图激情小说| 99er在线视频| 日欧美一区二区| 亚洲美女精品视频| 国产日韩综合av| 免费在线观看亚洲| 在线观看国产一区二区| 亚洲成人黄色片| 一夜七次郎国产精品亚洲| 免费看电影在线| 国产欧美在线看| 色橹橹欧美在线观看视频高清| 伊人久久婷婷色综合98网| 一区二区91| 日本一二三四区视频| 久久九九久精品国产免费直播| 美女毛片在线观看| 在线观看日韩精品| 图片区 小说区 区 亚洲五月| 久久综合免费视频影院| 久久91导航| 精品无人区一区二区三区| 香蕉久久网站| wwww.国产| 97精品国产97久久久久久久久久久久| 日本黄色录像视频| 色婷婷香蕉在线一区二区| 亚洲国产精品久久久久爰性色 | 久久精品日产第一区二区三区| 亚洲精品一区二区妖精| 久久久久久久久久久久久国产精品 | 日韩毛片视频| 中文字幕日本最新乱码视频| 国产美女精品在线| 精品人体无码一区二区三区| 精品福利免费观看| 亚洲国产一二三区| www.亚洲天堂| 99久久久国产精品免费调教网站| 免费不卡亚洲欧美| 亚洲国产日本| 无码国产精品一区二区免费式直播 | 久久成人免费日本黄色| 女人又爽又黄免费女仆| 精品免费在线视频| 欧美一级性视频| 欧美极品欧美精品欧美视频| 欧美片网站免费| 中文一区一区三区免费| 美女视频黄频大全不卡视频在线播放| 日韩人妻无码一区二区三区| 五月激情丁香一区二区三区| 黄色成人一级片| 亚州国产精品久久久| 高清一区二区三区| 国产一线二线三线女| 国产suv精品一区二区6| avove在线播放| 日韩三级精品电影久久久| 新版中文在线官网| 91麻豆蜜桃| 黄色精品一区| 黄色性生活一级片| 色欧美日韩亚洲| 成人在线免费看| 成人xxxx视频| 一区二区三区四区在线观看国产日韩| 欧美视频亚洲图片| 亚洲免费大片在线观看| 亚洲成人一级片| 97视频在线看| 欧美极品在线观看| 黄色三级视频在线| 1区2区3区欧美| 性猛交富婆╳xxx乱大交天津 | 2019年精品视频自拍| 一区二区免费在线视频| 国产精品综合视频| 国产精品theporn动漫| 亚洲精品在线视频| 欧美国产日韩电影| 超碰成人在线免费观看| 国产成人午夜视频| 久久亚洲天堂网| 在线播放日韩av| 欧洲精品99毛片免费高清观看| 97超碰人人澡| 亚洲国产成人一区二区三区| 99热这里只有精品99| 91极品女神在线| 日韩久久精品| 亚洲黄色小说在线观看| 色综合久久中文字幕综合网| 蜜桃av在线免费观看| 不卡一区二区三区四区五区| 久久精品人人| 欧美h片在线观看| 亚洲精品456在线播放狼人| 欧美日韩国产v| 一级特黄妇女高潮| 95精品视频在线| 亚洲一级片免费看| 欧美激情精品久久久久久黑人| 日本在线中文字幕一区| 手机免费av片| 精品色蜜蜜精品视频在线观看| aiai在线| 成人18视频| 日韩成人一区二区三区在线观看| 黄色一级视频免费观看| 亚洲天堂av电影| 高清一区二区三区| 日韩在线不卡一区| 丁香五六月婷婷久久激情| a免费在线观看| 日韩精品av一区二区三区| 成人午夜短视频|