日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

稿件來(lái)源:https://juejin.im/post/5cea1f705188250640005472

目錄:

  • 1、綜合
  • 1.1、使用場(chǎng)景
  • 1.2、核心思想
  • 1.3、切入角度
  • 1.4、其他
  • 2、基礎(chǔ)層設(shè)計(jì)
  • 2.1、自建Gitlab
  • 2.2、版本管理
  • 2.3、自動(dòng)編譯發(fā)布Jenkins
  • 2.4、純前端版本發(fā)布
  • 2.5、統(tǒng)一腳手架
  • 2.6、Node中間層
  • 2.7、埋點(diǎn)系統(tǒng)
  • 2.8、監(jiān)控和報(bào)警系統(tǒng)
  • 2.9、安全管理
  • 2.10、Eslint
  • 2.11、灰度發(fā)布
  • 2.12、前后端分離
  • 2.13、Mock
  • 2.14、定期備份
  • 3、應(yīng)用層設(shè)計(jì)
  • 3.1、多頁(yè)和單頁(yè)
  • 3.2、以應(yīng)用為單位劃分前端項(xiàng)目
  • 3.3、基礎(chǔ)組件庫(kù)的建設(shè)
  • 3.4、技術(shù)棧統(tǒng)一
  • 3.5、瀏覽器兼容
  • 3.6、內(nèi)容平_臺(tái)建設(shè)
  • 3.7、權(quán)限管理平_臺(tái)
  • 3.8、登錄系統(tǒng)設(shè)計(jì)(單點(diǎn)登錄)
  • 3.9、CDN
  • 3.10、負(fù)載均衡
  • 3.11、多端共用一套接口
  • 4、總結(jié)

1、綜合

大型項(xiàng)目前端架構(gòu)淺談(8000字原創(chuàng))

 

我在2年之前,寫(xiě)過(guò)一篇中小型項(xiàng)目的前端架構(gòu)淺談。隨著能力的上升,以及在阿里巴巴工作的經(jīng)驗(yàn),是時(shí)候?qū)懸黄笮晚?xiàng)目的前端架構(gòu)分析了。

本篇文章不會(huì)更多側(cè)重于具體技術(shù)實(shí)現(xiàn),而是嘗試從更高角度出發(fā),分析為什么要這么做,這些設(shè)計(jì)能解決什么問(wèn)題,成本和收益如何。

由于作者能力有限,可能會(huì)有所缺漏或者部分錯(cuò)誤,歡迎讀者指出。

1.1、適用場(chǎng)景:

本篇文章,適用于單個(gè)/多個(gè)大型項(xiàng)目、擁有超過(guò)10個(gè)以上的前端開(kāi)發(fā)的場(chǎng)景。

前端項(xiàng)目的規(guī)模不同,成本收益比也會(huì)有所差別。通常來(lái)說(shuō),人員越多、項(xiàng)目復(fù)雜度越高,那么收益/成本的比值越大。

對(duì)于人數(shù)較少、項(xiàng)目簡(jiǎn)單的開(kāi)發(fā)團(tuán)隊(duì),可能有部分措施不適用,因此應(yīng)該根據(jù)具體情況來(lái)選用。

1.2、核心思想:

【1】解決問(wèn)題:前端架構(gòu)的設(shè)計(jì),應(yīng)是用于解決已存在或者未來(lái)可能發(fā)生的技術(shù)問(wèn)題,增加項(xiàng)目的可管理性、穩(wěn)定性、可擴(kuò)展性。

【2】人效比:對(duì)于需要額外開(kāi)發(fā)工作量的事務(wù)(本文中存在一些需要一定開(kāi)發(fā)量的內(nèi)容),我們?cè)跊Q定是否去做的時(shí)候,應(yīng)該考慮到兩個(gè)要素:第一個(gè)是花費(fèi)的人力成本,第二個(gè)是未來(lái)可能節(jié)約的時(shí)間和金錢(qián)、避免的項(xiàng)目風(fēng)險(xiǎn)與資損、提高對(duì)業(yè)務(wù)的支撐能力以帶來(lái)在業(yè)務(wù)上可衡量的更高的價(jià)值、以及其他價(jià)值。

【3】定性和定量:架構(gòu)里設(shè)計(jì)的內(nèi)容,一定要有是可衡量的意義的,最好是可以定量的——即可以衡量帶來(lái)的收益或減少的成本,至少是可以定性的——即雖然無(wú)法用數(shù)字闡述收益,但我們可以明確這個(gè)是有意義的,例如增加安全性降低風(fēng)險(xiǎn)。

【4】數(shù)據(jù)敏感:專(zhuān)門(mén)寫(xiě)這一條強(qiáng)調(diào)數(shù)據(jù)作為依據(jù)的重要性。當(dāng)我們需要說(shuō)服其他部門(mén)/上級(jí)管理者,以推動(dòng)我們?cè)O(shè)計(jì)的內(nèi)容時(shí),只有數(shù)據(jù)——特別是跟錢(qián)有關(guān)的數(shù)據(jù),才是最有說(shuō)服力的證明。

由于篇幅所限,本文很難直接給出定量的值,因此建議架構(gòu)設(shè)計(jì)者,先確保項(xiàng)目中設(shè)計(jì)使用2.7里的埋點(diǎn)系統(tǒng),根據(jù)埋點(diǎn)系統(tǒng)獲取的數(shù)據(jù),對(duì)項(xiàng)目效果進(jìn)行定量分析,并以此寫(xiě)成PPT和其他部門(mén)/上級(jí)管理者進(jìn)行協(xié)調(diào)。

1.3、切入角度:

分為基礎(chǔ)層和應(yīng)用層。

基礎(chǔ)層偏基礎(chǔ)設(shè)施建設(shè),與業(yè)務(wù)相關(guān)性較低。

應(yīng)用層更貼近用戶(hù),用于解決某一個(gè)問(wèn)題。

部分兩個(gè)都沾邊的,根據(jù)經(jīng)驗(yàn)劃分到其中一個(gè)。

1.4、其他

由于已經(jīng)談到架構(gòu)層級(jí),因此很多內(nèi)容,并不僅僅只屬于前端領(lǐng)域,有很多內(nèi)容是復(fù)合領(lǐng)域(前端、后端、運(yùn)維、測(cè)試),因此需要負(fù)責(zé)架構(gòu)的人,技術(shù)棧足夠全面,對(duì)未來(lái)發(fā)展有足夠的前瞻性。

文章的內(nèi)容結(jié)構(gòu)為:【項(xiàng)目】—>【解決的問(wèn)題和帶來(lái)的好處】—>【項(xiàng)目的實(shí)際意義】

2、基礎(chǔ)層設(shè)計(jì)

2.1、自建Gitlab

這個(gè)是基礎(chǔ)的基礎(chǔ)了。本不應(yīng)該提的,不過(guò)考慮到我最近面試的幾家公司,有的公司(人數(shù)并不少)并沒(méi)有使用Gitlab,因此專(zhuān)門(mén)提一下,并且使用這個(gè)的難度非常低。

強(qiáng)烈建議使用Gitlab進(jìn)行版本管理,自建Gitlab難度并不大,方便管理,包括代碼管理、權(quán)限管理、提交日志查詢(xún),以及聯(lián)動(dòng)一些第三方插件。

意義:

公司代碼是公司的重要資產(chǎn),使用自建Gitlab可以有效保護(hù)公司資產(chǎn)。

2.2、版本管理

版本管理的幾個(gè)關(guān)鍵點(diǎn):

  • 發(fā)布后分支鎖死,不可再更改:指當(dāng)例如0.0.1版本成功發(fā)布后,不可再更改0.0.1分支上的代碼,否則可能會(huì)導(dǎo)致版本管理混亂。
  • 全自動(dòng)流程發(fā)布;指應(yīng)避免開(kāi)發(fā)者提交后,手動(dòng)編譯打包等操作,換句話(huà)說(shuō),開(kāi)發(fā)人員發(fā)布后,將自動(dòng)發(fā)布到預(yù)發(fā)布/生產(chǎn)環(huán)境。開(kāi)發(fā)人員不和相關(guān)環(huán)境直接接觸。實(shí)現(xiàn)這個(gè)需要參考下面的2.3。
  • 多版本并存;指當(dāng)例如發(fā)布0.0.2版本后,0.0.1版本的代碼應(yīng)仍保存在線(xiàn)上(例如CDN),這樣當(dāng)出現(xiàn)線(xiàn)上bug時(shí),方便快速回滾到上一個(gè)版本。

意義:

提高項(xiàng)目的可控性。

2.3、自動(dòng)編譯發(fā)布Jenkins

這個(gè)工具用于在代碼發(fā)布后,執(zhí)行一系列流程,例如自動(dòng)編譯打包合并,然后再?gòu)腉itlab發(fā)布到CDN或者靜態(tài)資源服務(wù)器。

使用這個(gè)工具,可以讓一般研發(fā)人員不關(guān)心代碼傳到Gitlab后會(huì)發(fā)生什么事情,只需要專(zhuān)心于開(kāi)發(fā)就可以了。

意義:

讓研發(fā)人員專(zhuān)心于研發(fā),和環(huán)境、運(yùn)維等事情脫鉤。

2.4、純前端版本發(fā)布

純前端版本發(fā)布分為兩步:

  • 前端發(fā)布到生產(chǎn)環(huán)境——此時(shí)可以通過(guò)外網(wǎng)鏈接加正確的版本號(hào)訪(fǎng)問(wèn)到新版本的代碼,但頁(yè)面上的資源還是舊版本;
  • 前端通過(guò)配置工具(或者是直接更新html文件),將html中引入的資源,改為新版本。

解決的問(wèn)題是:當(dāng)前端需要發(fā)布新版本時(shí),可以不依賴(lài)于后端(根據(jù)實(shí)際情況,也可以不依賴(lài)于運(yùn)維)。畢竟有很多需求并不需要后端介入,單純改個(gè)前端版本后就要后端發(fā)布一次,顯然是一件非常麻煩的事情。

這個(gè)需要專(zhuān)門(mén)的工具,用于配置版本發(fā)布,我最近就在寫(xiě)這個(gè)。

意義:

提高發(fā)布效率,降低發(fā)布帶來(lái)的人員時(shí)間損耗(這些都是錢(qián)),也可以在前端版本回滾的時(shí)候,速度更快。

2.5、統(tǒng)一腳手架

適用場(chǎng)景:有比較多獨(dú)立中小項(xiàng)目。好處:

  • 可以減少開(kāi)發(fā)人員配置腳手架帶來(lái)的時(shí)間損耗(特殊功能可以fork腳手架后再自行定制);
  • 統(tǒng)一項(xiàng)目結(jié)構(gòu),方便管理,也降低項(xiàng)目交接時(shí)帶來(lái)的需要熟悉項(xiàng)目的時(shí)間;
  • 方便統(tǒng)一技術(shù)棧,可以預(yù)先引入固定的組件庫(kù);

意義:

提高開(kāi)發(fā)人員在多個(gè)項(xiàng)目之間的快速切換能力,提高項(xiàng)目可維護(hù)性,統(tǒng)一公司技術(shù)棧,避免因?yàn)榄h(huán)境不同導(dǎo)致奇怪的問(wèn)題。

2.6、Node中間層

適用場(chǎng)景:需要seo且前端使用React、vue,或前端介入后端邏輯,直接讀取后端服務(wù)或者數(shù)據(jù)庫(kù)的情況。

  • SEO:仁者見(jiàn)仁智者見(jiàn)智,雖然很多公司已經(jīng)不做了,但通常認(rèn)為,還是有一定意義的(特別是需要搜索引擎引流的時(shí)候),因此React或者Vue的同構(gòu)是必須的。并且同構(gòu)還可以降低首頁(yè)白屏?xí)r間;
  • 前端讀取后端服務(wù)/數(shù)據(jù)庫(kù):好處是提高前端的開(kāi)發(fā)效率和對(duì)業(yè)務(wù)的支持能力,缺點(diǎn)是可能導(dǎo)致P0級(jí)故障。

意義:

讓前端可以侵入后端領(lǐng)域,質(zhì)的提升對(duì)業(yè)務(wù)的支持能力。

2.7、埋點(diǎn)系統(tǒng)

強(qiáng)烈推薦前端做自己的埋點(diǎn)系統(tǒng)。這個(gè)不同于后端的日志系統(tǒng)。

前端埋點(diǎn)系統(tǒng)的好處:

  • 記錄每個(gè)頁(yè)面的訪(fǎng)問(wèn)量(日周月年的UV、PV);
  • 記錄每個(gè)功能的使用量;
  • 捕捉報(bào)錯(cuò)情況;
  • 圖表化顯示,方便給其他部門(mén)展示;

埋點(diǎn)系統(tǒng)是前端高度介入業(yè)務(wù),把握業(yè)務(wù)發(fā)展情況的一把利劍,通過(guò)這個(gè)系統(tǒng),我們可以比后端更深刻的把握用戶(hù)的習(xí)慣,以及給產(chǎn)品經(jīng)理、運(yùn)營(yíng)等人員提供準(zhǔn)確的數(shù)據(jù)依據(jù)。當(dāng)有了數(shù)據(jù)后,前端人員就可以針對(duì)性的優(yōu)化功能、布局、頁(yè)面交互邏輯、用戶(hù)使用流程。

埋點(diǎn)系統(tǒng)應(yīng)和業(yè)務(wù)解耦,開(kāi)發(fā)人員使用時(shí)注冊(cè),然后在項(xiàng)目中引入。然后在埋點(diǎn)系統(tǒng)里查看相關(guān)數(shù)據(jù)(例如以小時(shí)、日、周、月、年為周期查看)[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604]。

意義:

數(shù)據(jù)是money,數(shù)據(jù)是公司的生命線(xiàn),數(shù)據(jù)是最好的武器。

2.8、監(jiān)控和報(bào)警系統(tǒng)

監(jiān)控和報(bào)警系統(tǒng)應(yīng)基于埋點(diǎn)系統(tǒng)而建立,在如以下場(chǎng)景時(shí)[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604]觸發(fā):

  • 當(dāng)訪(fǎng)問(wèn)量有比較大的變化(比如日PV/UV只有之前20%以下)時(shí),自動(dòng)觸發(fā)報(bào)警,發(fā)送郵件到相關(guān)人員郵箱;
  • 比如報(bào)錯(cuò)量大幅度上升(比如200%或更高),則觸發(fā)報(bào)警;
  • 當(dāng)一段時(shí)間內(nèi)沒(méi)有任何訪(fǎng)問(wèn)量(不符合之前的情況),則觸發(fā)報(bào)警;
  • 每過(guò)一段時(shí)間,自動(dòng)匯總訪(fǎng)問(wèn)者/報(bào)錯(cuò)觸發(fā)者的相關(guān)信息(例如系統(tǒng)、瀏覽器版本等);

建設(shè)這個(gè)系統(tǒng)的好處在于,提前發(fā)現(xiàn)一些不容易發(fā)現(xiàn)的bug(需要埋點(diǎn)做的比較扎實(shí))。有一些線(xiàn)上bug,因?yàn)橛脩?hù)環(huán)境特殊,導(dǎo)致無(wú)法被開(kāi)發(fā)人員和測(cè)試人員發(fā)現(xiàn)。但其中一部分bug又因?yàn)椴簧婕百Y金,并不會(huì)導(dǎo)致資損(因此也不會(huì)被后端的監(jiān)控系統(tǒng)所發(fā)現(xiàn)),這樣的bug非常容易影響項(xiàng)目里某個(gè)鏈路的正常使用。

意義:

提高項(xiàng)目的穩(wěn)定性,提高對(duì)業(yè)務(wù)的把控能力。降低bug數(shù),降低資損的可能性,提前發(fā)現(xiàn)某些功能的bug(在工單到來(lái)之前)。

2.9、安全管理

前端的安全管理,通常要依賴(lài)于后端,至于只跟單純有關(guān)系的例如dom.innerHTML= 'xxx '這種太基礎(chǔ),就不提了。

安全管理的很難從架構(gòu)設(shè)計(jì)上完全避免,但還是有一定解決方案的,常見(jiàn)安全問(wèn)題如下:

  • XSS注入:對(duì)用戶(hù)輸入的內(nèi)容,需要轉(zhuǎn)碼(大部分時(shí)候要server端來(lái)處理,偶爾也需要前端處理),禁止使用eval函數(shù);
  • https:這個(gè)顯然是必須的,好處非常多;
  • CSRF:要求server端加入CSRF的處理方法(至少在關(guān)鍵頁(yè)面加入);

意義:

減少安全漏洞,避免用戶(hù)受到損失,避免遭遇惡意攻擊,增加系統(tǒng)的穩(wěn)定性和安全性。

2.10、Eslint

Eslint的好處很多,強(qiáng)烈推薦使用:

  • 降低低級(jí)bug(例如拼寫(xiě)問(wèn)題)出現(xiàn)的概率;
  • 增加代碼的可維護(hù)性,可閱讀性;
  • 硬性統(tǒng)一代碼風(fēng)格,團(tuán)隊(duì)協(xié)作起來(lái)時(shí)更輕松;

總的來(lái)說(shuō),eslint推薦直接配置到腳手架之中,對(duì)我們提高代碼的可維護(hù)性的幫助會(huì)很大。可以考慮在上傳到gitlab時(shí),硬性要求eslint校驗(yàn),通過(guò)的才允許上傳。

意義:

提高代碼的可維護(hù)性,降低團(tuán)隊(duì)協(xié)作的成本。

2.11、灰度發(fā)布

灰度發(fā)布是大型項(xiàng)目在發(fā)布時(shí)的常見(jiàn)方法,指在發(fā)布版本時(shí),初始情況下,只允許小比例(比如1~5%比例的用戶(hù)使用),若出現(xiàn)問(wèn)題時(shí),可以快速回滾使用老版本,適用于主鏈路和訪(fǎng)問(wèn)量極大的頁(yè)面。

好處有以下幾點(diǎn):

  • 生產(chǎn)環(huán)境比開(kāi)發(fā)環(huán)境復(fù)雜,灰度發(fā)布時(shí)可以在生產(chǎn)環(huán)境小范圍嘗試觀(guān)察新版本是否可以正常運(yùn)行,即使出問(wèn)題,也可以控制損失。
  • 對(duì)于大版本更新,可以先灰度一部分,觀(guān)察埋點(diǎn)效果和用戶(hù)反饋(即所謂的搶先試用版)。假如效果并不好,那么回滾到老版本也可以及時(shí)止損;
  • 當(dāng)我們需要驗(yàn)證某些想法或問(wèn)題的時(shí)候,可以先灰度一部分,快速驗(yàn)證效果如何,然后查漏補(bǔ)缺或者針對(duì)性?xún)?yōu)化;

灰度發(fā)布通常分為多個(gè)階段:【1】1%;【2】5~10%;【3】30~50%;【4】全量推送(100%)。灰度發(fā)布一定要允許配置某些IP/賬號(hào)訪(fǎng)問(wèn)時(shí),可以直接訪(fǎng)問(wèn)到灰度版本。

意義:

降低風(fēng)險(xiǎn),提高發(fā)布靈活度。

2.12、前后端分離

這個(gè)并不是指常見(jiàn)的前后端分離,而是指在分配前后端管控的領(lǐng)域。

中小項(xiàng)目常見(jiàn)的情況是后端只提供接口和讓某個(gè)url指向某個(gè)html,前端負(fù)責(zé)html、css、js等靜態(tài)資源。

但大型項(xiàng)目并不建議這么做,建議前端負(fù)責(zé)除html以外的靜態(tài)資源,而html交給后端處理,理由有很多:

  • 后端進(jìn)行渲染,方便統(tǒng)一插入一些代碼和資源,例如埋點(diǎn)js,監(jiān)控js,國(guó)際化文本資源,頁(yè)面標(biāo)識(shí)符等。這些通常是后端通過(guò)調(diào)用某些服務(wù)直接寫(xiě)入的;
  • 當(dāng)頁(yè)面需要統(tǒng)一的頭尾時(shí)(參考淘寶里我的淘寶頁(yè)面),前端不應(yīng)該關(guān)注這些跟當(dāng)前頁(yè)面無(wú)關(guān)的東西;
  • 某些東西,如果通過(guò)html來(lái)管理,那么耦合度太高了,違背了解耦和分離的原則;
  • 前端版本發(fā)布在后端引入某種功能模塊后,可以從單獨(dú)的頁(yè)面控制前端發(fā)布內(nèi)容,比更新html更方便,也利于灰度發(fā)布;

意義:

更規(guī)范的進(jìn)行頁(yè)面管理,降低頁(yè)面和功能的耦合度,減少?gòu)?fù)雜頁(yè)面的環(huán)境配置時(shí)間。

2.13、Mock

Mock也是常見(jiàn)前端系統(tǒng)之一,用于解決在后端接口未好時(shí),生成返回的數(shù)據(jù)。

我個(gè)人不太建議開(kāi)發(fā)一個(gè)專(zhuān)門(mén)的系統(tǒng)來(lái)Mock,更好的Mock手法是直接嵌入到腳手架之中。思路如下:

  • 當(dāng)在開(kāi)發(fā)環(huán)境下,訪(fǎng)問(wèn)鏈接通常是localhost:8000/index.html,此時(shí)加入后綴 ?debug=true;
  • 封裝好的異步請(qǐng)求在發(fā)現(xiàn)當(dāng)前鏈接有以上標(biāo)志時(shí),認(rèn)為是測(cè)試環(huán)境,訪(fǎng)問(wèn)/userinfo 時(shí),不去讀取線(xiàn)上的數(shù)據(jù)(因?yàn)橐沧x取不到),去本地環(huán)境讀取 src/test_ajax/userinfo.json,并將內(nèi)容返回給用戶(hù);
  • 異步請(qǐng)求正常拿到數(shù)據(jù),在頁(yè)面中顯示[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604];
  • 當(dāng)線(xiàn)上接口可以獲取到數(shù)據(jù)后,從network里找到返回的數(shù)據(jù),放入/ src/test_ajax/userinfo.json中,此時(shí)再次本地調(diào)試的話(huà),相當(dāng)于使用的是線(xiàn)上的真實(shí)數(shù)據(jù)。
</li>
復(fù)制代碼

這種處理,可以降低mock的復(fù)雜度,隨時(shí)更改mock時(shí)返回的數(shù)據(jù),比單獨(dú)開(kāi)發(fā)一個(gè)mock系統(tǒng)性?xún)r(jià)比更高。

意義:

在前后端并行開(kāi)發(fā)時(shí),降低溝通交流成本,方便開(kāi)發(fā)完畢后直接對(duì)接。

2.14、定期備份

備份是常被忽略的一件事情,但當(dāng)我們遇見(jiàn)毀滅性場(chǎng)景時(shí),缺少備份帶來(lái)的損失是非常大的,常見(jiàn)場(chǎng)景:

  • 服務(wù)器損壞,導(dǎo)致存在該服務(wù)器上的內(nèi)容全部完蛋;
  • 觸發(fā)某致命bug或者錯(cuò)誤操作(例如rm -f),導(dǎo)致文件和數(shù)據(jù)全部消失;
  • 數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤操作或出現(xiàn)問(wèn)題,導(dǎo)致用戶(hù)數(shù)據(jù)、公司資產(chǎn)遭受?chē)?yán)重?fù)p失;

總的來(lái)說(shuō),沒(méi)人想遇見(jiàn)這樣的場(chǎng)景,但我們必須考慮這種極端情況的發(fā)生,因此需要從架構(gòu)層面解決這個(gè)問(wèn)題。常見(jiàn)方法是定期備份、多機(jī)備份、容災(zāi)系統(tǒng)建設(shè)等。

意義:

避免在遭遇極端場(chǎng)景時(shí),給公司帶來(lái)不可估量的損失。

3、應(yīng)用層設(shè)計(jì)

3.1、多頁(yè)和單頁(yè)

除了特殊場(chǎng)景,通常推薦使用多頁(yè)架構(gòu)。理由如下:

  • 多頁(yè)項(xiàng)目,頁(yè)面和頁(yè)面之間是獨(dú)立的,不存在交互,因此當(dāng)一個(gè)頁(yè)面需要單獨(dú)重構(gòu)時(shí),不會(huì)影響其他頁(yè)面,對(duì)于有長(zhǎng)期歷史的項(xiàng)目來(lái)說(shuō),可維護(hù)性、可重構(gòu)性要高很多;
  • 多頁(yè)項(xiàng)目的缺點(diǎn)是不同頁(yè)面切換時(shí),會(huì)有一個(gè)白屏?xí)r間,但通常來(lái)說(shuō),這個(gè)時(shí)間并不長(zhǎng),大部分現(xiàn)有大公司的線(xiàn)上網(wǎng)頁(yè),都是這樣的,因此認(rèn)為是可以接受的;
  • 多頁(yè)項(xiàng)目可以單次只更新一個(gè)頁(yè)面的版本,而單頁(yè)項(xiàng)目如果其中一個(gè)功能模塊要更新(特別是公共組件更新),很容易讓所有頁(yè)面都需要更新版本;
  • 多頁(yè)項(xiàng)目的版本控制更簡(jiǎn)單,如果需要頁(yè)面拆分,調(diào)整部分頁(yè)面的使用流程,難度也會(huì)更低;
  • 灰度發(fā)布更友好;

之前面試的一家,采用了單頁(yè)的形式,之前因?yàn)榉N種原因,同時(shí)采用了ng和react。由于項(xiàng)目歷史也比較久(3年以上),結(jié)果導(dǎo)致目前繼續(xù)維護(hù)更新的難度很大,即使想部分重構(gòu),也很麻煩。

意義:

降低長(zhǎng)期項(xiàng)目迭代維護(hù)的難度,

3.2、以應(yīng)用為單位劃分前端項(xiàng)目

在項(xiàng)目比較大的時(shí)候,將所有頁(yè)面的前端文件放入到同一個(gè)代碼倉(cāng)庫(kù)里,我之前參與過(guò)一家企業(yè)的前端項(xiàng)目開(kāi)發(fā),發(fā)現(xiàn)其就是這么做的。根據(jù)使用經(jīng)驗(yàn)來(lái)看[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604],存在很多問(wèn)題:

  • 會(huì)極大的增加代碼的維護(hù)難度;
  • 項(xiàng)目會(huì)變得很丑陋;
  • 不方便權(quán)限管理,容易造成頁(yè)面誤更改或代碼泄密;
  • 任何人都有權(quán)利改任何他能看到的頁(yè)面(在合并代碼的時(shí)候,管理人員并不能確定他本次修改的頁(yè)面是否是需求里他應(yīng)該改的頁(yè)面);
  • 發(fā)布成本高,即使改一個(gè)頁(yè)面,也需要發(fā)布所有資源;

因此,我們應(yīng)該避免這種現(xiàn)象的發(fā)生,個(gè)人推薦以應(yīng)用為單位進(jìn)行開(kāi)發(fā)、發(fā)布。所謂應(yīng)用即指一個(gè)業(yè)務(wù)涉及到的前后端代碼,好處很多:

  • 方便進(jìn)行管理,當(dāng)某個(gè)業(yè)務(wù)有需求變更時(shí),可以只給研發(fā)人員該業(yè)務(wù)前端應(yīng)用的developer權(quán)限;
  • 在需要發(fā)布某業(yè)務(wù)時(shí),只需要發(fā)布該業(yè)務(wù)的所屬應(yīng)用即可;

意義:

規(guī)范項(xiàng)目,增加代碼的安全性,降低項(xiàng)目維護(hù)成本。

3.3、基礎(chǔ)組件庫(kù)的建設(shè)

這個(gè)蠻基礎(chǔ)的,對(duì)于組件庫(kù)的建設(shè),不建議研發(fā)人員較少時(shí)去做這件事情,專(zhuān)職前端開(kāi)發(fā)人數(shù)少于10人時(shí),建議使用比較靠譜的第三方UI庫(kù),例如Antd,這樣性?xún)r(jià)比更高。

設(shè)計(jì)基礎(chǔ)組件庫(kù)的前提,是要求統(tǒng)一技術(shù)棧,這樣才能最大化基礎(chǔ)組件庫(kù)的效益。組件庫(kù)建議以使用以下參考標(biāo)準(zhǔn):

  • 使用ts;
  • 可擴(kuò)展性強(qiáng);
  • 適用程度高;
  • 文檔清楚詳細(xì);
  • 版本隔離,小版本優(yōu)化加功能,大改需要大版本更新;
  • 和UI協(xié)調(diào)統(tǒng)一,要求UI交互參與進(jìn)來(lái);

總的來(lái)說(shuō),建設(shè)起來(lái)后,利大于弊,但是需要專(zhuān)人維護(hù),因此還是有一定成本的。

意義:

統(tǒng)一不同/相同產(chǎn)品線(xiàn)之間的風(fēng)格,給用戶(hù)更好的體驗(yàn),減少單次開(kāi)發(fā)中寫(xiě)UI組件時(shí)浪費(fèi)的時(shí)間和人力,提高開(kāi)發(fā)效率。

3.4、技術(shù)棧統(tǒng)一

前端有三大主流框架,還有兼容性最強(qiáng)jQuery,以及各種第三方庫(kù),UI框架。因此項(xiàng)目需求如果復(fù)雜一些,很容易形成一個(gè)大雜燴。因此前端的技術(shù)棧必須統(tǒng)一,具體來(lái)說(shuō),建議實(shí)現(xiàn)以下舉措:

  • 三大框架選型其一,團(tuán)隊(duì)水平一般推薦Vue、水平較好推薦React,對(duì)外項(xiàng)目選React或者ng;
  • 需要兼容IE8或更老版本時(shí),建議使用jQuery;
  • 組件庫(kù)自建或者統(tǒng)一選擇一個(gè)固定的第三方;
  • 一些特殊第三方庫(kù)統(tǒng)一使用一個(gè)版本,例如需要使用地圖時(shí),固定使用高德或百度或騰訊地圖;
  • 基礎(chǔ)設(shè)施建設(shè)應(yīng)避免重復(fù)造輪子,所有團(tuán)隊(duì)盡量共用,并有專(zhuān)門(mén)的前端平_臺(tái)負(fù)責(zé)統(tǒng)一這些東西,對(duì)于特殊需求,可以新建,但應(yīng)當(dāng)有說(shuō)服力;

總的來(lái)說(shuō),技術(shù)棧統(tǒng)一的好處很多,可以有效提高開(kāi)發(fā)效率,降低重復(fù)造輪子產(chǎn)生的成本。

意義:

方便招人,簡(jiǎn)化團(tuán)隊(duì)成員培養(yǎng)成本,以及提高項(xiàng)目的可持續(xù)性。

3.5、瀏覽器兼容

常見(jiàn)的問(wèn)題是IE6、7、8,以及部分小眾瀏覽器(PC和手機(jī))產(chǎn)生的奇怪問(wèn)題。因此應(yīng)該考慮統(tǒng)一解決方案,避免bug的重復(fù)產(chǎn)生。常見(jiàn)解決方案有:

  • 配置postcss,讓某些css增加兼容性前綴;
  • 寫(xiě)一個(gè)wepback的loader,處理某些特殊場(chǎng)景;
  • 規(guī)范團(tuán)隊(duì)代碼,使用更穩(wěn)定的寫(xiě)法(例如移動(dòng)端避免使用fixed進(jìn)行布局);
  • 對(duì)常見(jiàn)問(wèn)題、疑難問(wèn)題,總結(jié)解決方案并團(tuán)隊(duì)共享;
  • 建議或引導(dǎo)用戶(hù)使用高版本瀏覽器(比如chrome);

意義:

避免瀏覽器環(huán)境產(chǎn)生的bug,以及排查此類(lèi)bug所浪費(fèi)的大量時(shí)間。

3.6、內(nèi)容平_臺(tái)建設(shè)

為了提高公司內(nèi)部的溝通效率,總結(jié)經(jīng)驗(yàn),以及保密原因。應(yīng)建設(shè)一個(gè)內(nèi)部論壇+博客站點(diǎn)。其具備的好處如下:

  • 可以記錄公司的歷史;
  • 研發(fā)同學(xué)之間分享經(jīng)驗(yàn);
  • 總結(jié)轉(zhuǎn)載一些外界比較精品的文章,提高大家的眼界;
  • 增加公司內(nèi)部同學(xué)的交流,有利于公司的團(tuán)隊(duì)和文化建設(shè);
  • 對(duì)某些技術(shù)問(wèn)題可以進(jìn)行討論,減少因沒(méi)有達(dá)成共識(shí)帶來(lái)的溝通損耗;

眾所周知,大型互聯(lián)網(wǎng)公司通常都有這樣一個(gè)內(nèi)部論壇和博客站點(diǎn)。其降低了公司的溝通和交流成本,也增加了公司的技術(shù)積累。

意義:

博客增強(qiáng)技術(shù)積累,論壇增強(qiáng)公司內(nèi)部溝通能力。

3.7、權(quán)限管理平_臺(tái)

當(dāng)公司內(nèi)部人員較多時(shí),應(yīng)有一個(gè)專(zhuān)門(mén)的平_臺(tái),來(lái)管理、規(guī)范用戶(hù)的權(quán)限以及可訪(fǎng)問(wèn)內(nèi)容[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604]。權(quán)限管理平_臺(tái)有幾個(gè)特點(diǎn):

  • 必然和Server端天然高耦合度,因此需要有專(zhuān)門(mén)的控制模塊負(fù)責(zé)處理權(quán)限問(wèn)題(負(fù)責(zé)Server端開(kāi)發(fā)處理,或者前端通過(guò)中間層例如Node層介入處理);
  • 自動(dòng)化流程控制,即用戶(hù)創(chuàng)建、申請(qǐng)、審批、離職自動(dòng)刪除,都應(yīng)該是由系統(tǒng)推進(jìn)并提醒相關(guān)人士,必要時(shí)應(yīng)能觸發(fā)報(bào)警;
  • 權(quán)限應(yīng)有時(shí)效性,減少永久性權(quán)限的產(chǎn)生;
  • 審批流程應(yīng)清晰可見(jiàn),每一階段流程應(yīng)具體明確;
  • 應(yīng)與公司流程緊密結(jié)合,并且提高可修改性,方便公司后期進(jìn)行流程優(yōu)化;

意義:

使得公司內(nèi)部流程正規(guī)化、信息化。

3.8、登錄系統(tǒng)設(shè)計(jì)(單點(diǎn)登錄)

當(dāng)公司內(nèi)部業(yè)務(wù)線(xiàn)比較復(fù)雜但相互之間的耦合度比較高時(shí),我們應(yīng)該考慮設(shè)計(jì)添加單點(diǎn)登錄系統(tǒng)。具體來(lái)說(shuō),用戶(hù)在一處登錄,即可以在任何頁(yè)面訪(fǎng)問(wèn),登出時(shí),也同樣在任何頁(yè)面都失去登錄狀態(tài)。SSO的好處很多:

  • 增強(qiáng)用戶(hù)體驗(yàn);
  • 打通了不同業(yè)務(wù)系統(tǒng)之間的用戶(hù)數(shù)據(jù);
  • 方便統(tǒng)一管理用戶(hù);
  • 有利于引流;
  • 降低開(kāi)發(fā)系統(tǒng)的成本(不需要每個(gè)業(yè)務(wù)都開(kāi)發(fā)一次登錄系統(tǒng)和用戶(hù)狀態(tài)控制);

總的來(lái)說(shuō),大中型web應(yīng)用,SSO可以帶來(lái)很多好處,缺點(diǎn)卻很少。

意義:

用戶(hù)體驗(yàn)增強(qiáng),打通不同業(yè)務(wù)之間的間隔,降低開(kāi)發(fā)成本和用戶(hù)管理成本。

3.9、CDN

前端資源的加載速度是衡量用戶(hù)體驗(yàn)的重要指標(biāo)之一。而現(xiàn)實(shí)中,因?yàn)榉N種因素,用戶(hù)在加載頁(yè)面資源時(shí),會(huì)受到很多限制。因此上CDN是非常有意義的,好處如下:

  • 用戶(hù)來(lái)自不同地區(qū),加入CDN可以使用戶(hù)訪(fǎng)問(wèn)資源時(shí),訪(fǎng)問(wèn)離自己比較近的CDN服務(wù)器,降低訪(fǎng)問(wèn)延遲;
  • 降低服務(wù)器帶寬使用成本;
  • 支持視頻、靜態(tài)資源、大文件、小文件、直播等多種業(yè)務(wù)場(chǎng)景;
  • 消除跨運(yùn)營(yíng)商造成的網(wǎng)絡(luò)速度較慢的問(wèn)題;
  • 降低DDoS攻擊造成的對(duì)網(wǎng)站的影響;

CDN是一種比較成熟的技術(shù),各大云平_臺(tái)都有提供CDN服務(wù),價(jià)格也不貴,因此CDN的性?xún)r(jià)比很高。

意義:

增加用戶(hù)訪(fǎng)問(wèn)速度,降低網(wǎng)絡(luò)延遲,帶寬優(yōu)化,減少服務(wù)器負(fù)載,增強(qiáng)對(duì)攻擊的抵抗能力。

3.10、負(fù)載均衡

目前來(lái)看,負(fù)載均衡通常使用Nginx比較多,以前也有使用Apache。當(dāng)遇見(jiàn)大型項(xiàng)目的時(shí)候,負(fù)載均衡和分布式幾乎是必須的。負(fù)載均衡有以下好處:

  • 降低單臺(tái)server的壓力,提高業(yè)務(wù)承載能力;
  • 方便應(yīng)對(duì)峰值流量,擴(kuò)容方便(如舉辦某些活動(dòng)時(shí));
  • 增強(qiáng)業(yè)務(wù)的可用性、擴(kuò)展性、穩(wěn)定性;

負(fù)載均衡已經(jīng)是蠻常見(jiàn)的技術(shù)了,好處不用多說(shuō),很容易理解。

意義:

增強(qiáng)業(yè)務(wù)的可用性、擴(kuò)展性、穩(wěn)定性,可以支持更多用戶(hù)的訪(fǎng)問(wèn)。

3.11、多端共用一套接口

目前常見(jiàn)場(chǎng)景是一個(gè)業(yè)務(wù),同時(shí)有PC頁(yè)面和H5頁(yè)面,由于業(yè)務(wù)是一樣的,因此應(yīng)避免同一個(gè)業(yè)務(wù)有多套接口分別適用于PC和H5端。[原創(chuàng)の水印-作者:零零水(王冬),QQ:20004604]因此解決方案如下:

  • 后端提供的接口,應(yīng)該同時(shí)包含PC和H5的數(shù)據(jù)(即單獨(dú)對(duì)一個(gè)存在亢余數(shù)據(jù));
  • 接口應(yīng)當(dāng)穩(wěn)定,即當(dāng)業(yè)務(wù)變更時(shí),應(yīng)盡量采取追加數(shù)據(jù)的形式;
  • 只有在單獨(dú)一端需要特殊業(yè)務(wù)流程時(shí),設(shè)計(jì)單端獨(dú)有接口;

多端共用接口,是減少開(kāi)發(fā)工作量,并且提高業(yè)務(wù)可維護(hù)性的重要解決方案。

意義:

降低開(kāi)發(fā)工作量,增強(qiáng)可維護(hù)性。

4、總結(jié)

由于各個(gè)公司具體情況不同,項(xiàng)目也具有特殊性,因此以上設(shè)計(jì)不可強(qiáng)行套入,應(yīng)根據(jù)自己公司規(guī)模、項(xiàng)目進(jìn)展、人員數(shù)量等,先添加比較重要的功能和設(shè)計(jì)。并需要考慮到長(zhǎng)期項(xiàng)目的可維護(hù)性和發(fā)展需要,對(duì)部分基礎(chǔ)設(shè)施進(jìn)行提前研發(fā)設(shè)計(jì)。

篇幅所限,因此無(wú)法面面俱到,只提了一些我認(rèn)為比較重要的架構(gòu)層面需要考慮的內(nèi)容,歡迎大家補(bǔ)充。大家如果有自己的看法,歡迎回復(fù),或者添加我的微信 qq20004604(昵稱(chēng):零零水)進(jìn)行討論。

最后問(wèn)一下,西安有沒(méi)有不加班,并且需要前端架構(gòu)師的公司,請(qǐng)聯(lián)系我

分享到:
標(biāo)簽:架構(gòu)
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定