1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 8744字,需瀏覽 18分鐘

         ·

        2021-08-25 11:59

        • 作者:掘金 - 水哥
        • 來源:https://juejin.cn/post/6844903853859536903

        1、綜合

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

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

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

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

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

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

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

        1.2、核心思想:

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

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

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

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

        由于篇幅所限,本文很難直接給出定量的值,因此建議架構(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)行定量分析,并以此寫成PPT和其他部門/上級(jí)管理者進(jìn)行協(xié)調(diào)。

        1.3、切入角度:

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

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

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

        部分兩個(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ì)未來發(fā)展有足夠的前瞻性。

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

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

        2.1、自建Gitlab

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

        強(qiáng)烈建議使用Gitlab進(jìn)行版本管理,自建Gitlab難度并不大,方便管理,包括代碼管理、權(quá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)避免開發(fā)者提交后,手動(dòng)編譯打包等操作,換句話說,開發(fā)人員發(fā)布后,將自動(dòng)發(fā)布到預(yù)發(fā)布/生產(chǎn)環(huán)境。開發(fā)人員不和相關(guān)環(huán)境直接接觸。實(shí)現(xiàn)這個(gè)需要參考下面的2.3。

        • 多版本并存;指當(dāng)例如發(fā)布0.0.2版本后,0.0.1版本的代碼應(yīng)仍保存在線上(例如CDN),這樣當(dāng)出現(xiàn)線上bug時(shí),方便快速回滾到上一個(gè)版本。

        意義:

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

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

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

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

        意義:

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

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

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

        • 前端發(fā)布到生產(chǎn)環(huán)境——此時(shí)可以通過外網(wǎng)鏈接加正確的版本號(hào)訪問到新版本的代碼,但頁面上的資源還是舊版本;

        • 前端通過配置工具(或者是直接更新html文件),將html中引入的資源,改為新版本。

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

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

        意義:

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

        文章鏈接:

        juejin.cn/post/684490…

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

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

        • 可以減少開發(fā)人員配置腳手架帶來的時(shí)間損耗(特殊功能可以fork腳手架后再自行定制);

        • 統(tǒng)一項(xiàng)目結(jié)構(gòu),方便管理,也降低項(xiàng)目交接時(shí)帶來的需要熟悉項(xiàng)目的時(shí)間;

        • 方便統(tǒng)一技術(shù)棧,可以預(yù)先引入固定的組件庫;

        意義:

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

        2.6、Node中間層

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

        • SEO:仁者見仁智者見智,雖然很多公司已經(jīng)不做了,但通常認(rèn)為,還是有一定意義的(特別是需要搜索引擎引流的時(shí)候),因此React或者Vue的同構(gòu)是必須的。并且同構(gòu)還可以降低首頁白屏?xí)r間;

        • 前端讀取后端服務(wù)/數(shù)據(jù)庫:好處是提高前端的開發(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è)頁面的訪問量(日周月年的UV、PV);

        • 記錄每個(gè)功能的使用量;

        • 捕捉報(bào)錯(cuò)情況;

        • 圖表化顯示,方便給其他部門展示;

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

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

        意義:

        數(shù)據(jù)是money,數(shù)據(jù)是公司的生命線,數(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)訪問量有比較大的變化(比如日PV/UV只有之前20%以下)時(shí),自動(dòng)觸發(fā)報(bào)警,發(fā)送郵件到相關(guān)人員郵箱;

        • 比如報(bào)錯(cuò)量大幅度上升(比如200%或更高),則觸發(fā)報(bào)警;

        • 當(dāng)一段時(shí)間內(nèi)沒有任何訪問量(不符合之前的情況),則觸發(fā)報(bào)警;

        • 每過一段時(shí)間,自動(dòng)匯總訪問者/報(bào)錯(cuò)觸發(fā)者的相關(guān)信息(例如系統(tǒng)、瀏覽器版本等);

        建設(shè)這個(gè)系統(tǒng)的好處在于,提前發(fā)現(xiàn)一些不容易發(fā)現(xiàn)的bug(需要埋點(diǎn)做的比較扎實(shí))。有一些線上bug,因?yàn)橛脩舡h(huán)境特殊,導(dǎo)致無法被開發(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(在工單到來之前)。

        2.9、安全管理

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

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

        • XSS注入:對(duì)用戶輸入的內(nèi)容,需要轉(zhuǎn)碼(大部分時(shí)候要server端來處理,偶爾也需要前端處理),禁止使用eval函數(shù);

        • https:這個(gè)顯然是必須的,好處非常多;

        • CSRF:要求server端加入CSRF的處理方法(至少在關(guān)鍵頁面加入);

        意義:

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

        2.10、Eslint

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

        • 降低低級(jí)bug(例如拼寫問題)出現(xiàn)的概率;

        • 增加代碼的可維護(hù)性,可閱讀性;

        • 硬性統(tǒng)一代碼風(fēng)格,團(tuán)隊(duì)協(xié)作起來時(shí)更輕松;

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

        意義:

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

        2.11、灰度發(fā)布

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

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

        • 生產(chǎn)環(huán)境比開發(fā)環(huán)境復(fù)雜,灰度發(fā)布時(shí)可以在生產(chǎn)環(huán)境小范圍嘗試觀察新版本是否可以正常運(yùn)行,即使出問題,也可以控制損失。

        • 對(duì)于大版本更新,可以先灰度一部分,觀察埋點(diǎn)效果和用戶反饋(即所謂的搶先試用版)。假如效果并不好,那么回滾到老版本也可以及時(shí)止損;

        • 當(dāng)我們需要驗(yàn)證某些想法或問題的時(shí)候,可以先灰度一部分,快速驗(yàn)證效果如何,然后查漏補(bǔ)缺或者針對(duì)性優(yōu)化;

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

        意義:

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

        2.12、前后端分離

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

        中小項(xiàng)目常見的情況是后端只提供接口和讓某個(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,國際化文本資源,頁面標(biāo)識(shí)符等。這些通常是后端通過調(diào)用某些服務(wù)直接寫入的;

        • 當(dāng)頁面需要統(tǒng)一的頭尾時(shí)(參考淘寶里我的淘寶頁面),前端不應(yīng)該關(guān)注這些跟當(dāng)前頁面無關(guān)的東西;

        • 某些東西,如果通過html來管理,那么耦合度太高了,違背了解耦和分離的原則;

        • 前端版本發(fā)布在后端引入某種功能模塊后,可以從單獨(dú)的頁面控制前端發(fā)布內(nèi)容,比更新html更方便,也利于灰度發(fā)布;

        意義:

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

        2.13、Mock

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

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

        • 當(dāng)在開發(fā)環(huán)境下,訪問鏈接通常是localhost:8000/index.html,此時(shí)加入后綴 ?debug=true;

        • 封裝好的異步請(qǐng)求在發(fā)現(xiàn)當(dāng)前鏈接有以上標(biāo)志時(shí),認(rèn)為是測(cè)試環(huán)境,訪問/userinfo 時(shí),不去讀取線上的數(shù)據(jù)(因?yàn)橐沧x取不到),去本地環(huán)境讀取 src/test_ajax/userinfo.json,并將內(nèi)容返回給用戶;

        • 異步請(qǐng)求正常拿到數(shù)據(jù),在頁面中顯示[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604];

        • 當(dāng)線上接口可以獲取到數(shù)據(jù)后,從network里找到返回的數(shù)據(jù),放入/ src/test_ajax/userinfo.json中,此時(shí)再次本地調(diào)試的話,相當(dāng)于使用的是線上的真實(shí)數(shù)據(jù)。

          </li>
          復(fù)制代碼

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

        意義:

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

        2.14、定期備份

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

        • 服務(wù)器損壞,導(dǎo)致存在該服務(wù)器上的內(nèi)容全部完蛋;

        • 觸發(fā)某致命bug或者錯(cuò)誤操作(例如rm -f),導(dǎo)致文件和數(shù)據(jù)全部消失;

        • 數(shù)據(jù)庫出現(xiàn)錯(cuò)誤操作或出現(xiàn)問題,導(dǎo)致用戶數(shù)據(jù)、公司資產(chǎn)遭受嚴(yán)重?fù)p失;

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

        意義:

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

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

        3.1、多頁和單頁

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

        • 多頁項(xiàng)目,頁面和頁面之間是獨(dú)立的,不存在交互,因此當(dāng)一個(gè)頁面需要單獨(dú)重構(gòu)時(shí),不會(huì)影響其他頁面,對(duì)于有長期歷史的項(xiàng)目來說,可維護(hù)性、可重構(gòu)性要高很多;

        • 多頁項(xiàng)目的缺點(diǎn)是不同頁面切換時(shí),會(huì)有一個(gè)白屏?xí)r間,但通常來說,這個(gè)時(shí)間并不長,大部分現(xiàn)有大公司的線上網(wǎng)頁,都是這樣的,因此認(rèn)為是可以接受的;

        • 多頁項(xiàng)目可以單次只更新一個(gè)頁面的版本,而單頁項(xiàng)目如果其中一個(gè)功能模塊要更新(特別是公共組件更新),很容易讓所有頁面都需要更新版本;

        • 多頁項(xiàng)目的版本控制更簡(jiǎn)單,如果需要頁面拆分,調(diào)整部分頁面的使用流程,難度也會(huì)更低;

        • 灰度發(fā)布更友好;

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

        意義:

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

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

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

        • 會(huì)極大的增加代碼的維護(hù)難度;

        • 項(xiàng)目會(huì)變得很丑陋;

        • 不方便權(quán)限管理,容易造成頁面誤更改或代碼泄密;

        • 任何人都有權(quán)利改任何他能看到的頁面(在合并代碼的時(shí)候,管理人員并不能確定他本次修改的頁面是否是需求里他應(yīng)該改的頁面);

        • 發(fā)布成本高,即使改一個(gè)頁面,也需要發(fā)布所有資源;

        因此,我們應(yīng)該避免這種現(xiàn)象的發(fā)生,個(gè)人推薦以應(yīng)用為單位進(jìn)行開發(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ǔ)組件庫的建設(shè)

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

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

        • 使用ts;

        • 可擴(kuò)展性強(qiáng);

        • 適用程度高;

        • 文檔清楚詳細(xì);

        • 版本隔離,小版本優(yōu)化加功能,大改需要大版本更新;

        • 和UI協(xié)調(diào)統(tǒng)一,要求UI交互參與進(jìn)來;

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

        意義:

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

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

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

        • 三大框架選型其一,團(tuán)隊(duì)水平一般推薦Vue、水平較好推薦React,對(duì)外項(xiàng)目選React或者ng;

        • 需要兼容IE8或更老版本時(shí),建議使用jQuery;

        • 組件庫自建或者統(tǒng)一選擇一個(gè)固定的第三方;

        • 一些特殊第三方庫統(tǒng)一使用一個(gè)版本,例如需要使用地圖時(shí),固定使用高德或百度或騰訊地圖;

        • 基礎(chǔ)設(shè)施建設(shè)應(yīng)避免重復(fù)造輪子,所有團(tuán)隊(duì)盡量共用,并有專門的前端平_臺(tái)負(fù)責(zé)統(tǒng)一這些東西,對(duì)于特殊需求,可以新建,但應(yīng)當(dāng)有說服力;

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

        意義:

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

        3.5、瀏覽器兼容

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

        • 配置postcss,讓某些css增加兼容性前綴;

        • 寫一個(gè)wepback的loader,處理某些特殊場(chǎng)景;

        • 規(guī)范團(tuán)隊(duì)代碼,使用更穩(wěn)定的寫法(例如移動(dòng)端避免使用fixed進(jìn)行布局);

        • 對(duì)常見問題、疑難問題,總結(jié)解決方案并團(tuán)隊(duì)共享;

        • 建議或引導(dǎo)用戶使用高版本瀏覽器(比如chrome);

        意義:

        避免瀏覽器環(huán)境產(chǎn)生的bug,以及排查此類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ù)問題可以進(jìn)行討論,減少因沒有達(dá)成共識(shí)帶來的溝通損耗;

        眾所周知,大型互聯(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è)專門的平_臺(tái),來管理、規(guī)范用戶的權(quán)限以及可訪問內(nèi)容[原創(chuàng)水印-作者:零零水(王冬),微信:qq20004604]。權(quán)限管理平_臺(tái)有幾個(gè)特點(diǎn):

        • 必然和Server端天然高耦合度,因此需要有專門的控制模塊負(fù)責(zé)處理權(quán)限問題(負(fù)責(zé)Server端開發(fā)處理,或者前端通過中間層例如Node層介入處理);

        • 自動(dòng)化流程控制,即用戶創(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)清晰可見,每一階段流程應(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ù)線比較復(fù)雜但相互之間的耦合度比較高時(shí),我們應(yīng)該考慮設(shè)計(jì)添加單點(diǎn)登錄系統(tǒng)。具體來說,用戶在一處登錄,即可以在任何頁面訪問,登出時(shí),也同樣在任何頁面都失去登錄狀態(tài)。SSO的好處很多:

        • 增強(qiáng)用戶體驗(yàn);

        • 打通了不同業(yè)務(wù)系統(tǒng)之間的用戶數(shù)據(jù);

        • 方便統(tǒng)一管理用戶;

        • 有利于引流;

        • 降低開發(fā)系統(tǒng)的成本(不需要每個(gè)業(yè)務(wù)都開發(fā)一次登錄系統(tǒng)和用戶狀態(tài)控制);

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

        意義:

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

        3.9、CDN

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

        • 用戶來自不同地區(qū),加入CDN可以使用戶訪問資源時(shí),訪問離自己比較近的CDN服務(wù)器,降低訪問延遲;

        • 降低服務(wù)器帶寬使用成本;

        • 支持視頻、靜態(tài)資源、大文件、小文件、直播等多種業(yè)務(wù)場(chǎng)景;

        • 消除跨運(yùn)營商造成的網(wǎng)絡(luò)速度較慢的問題;

        • 降低DDOS攻擊造成的對(duì)網(wǎng)站的影響;

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

        意義:

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

        3.10、負(fù)載均衡

        目前來看,負(fù)載均衡通常使用Nginx比較多,以前也有使用Apache。當(dāng)遇見大型項(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)是蠻常見的技術(shù)了,好處不用多說,很容易理解。

        意義:

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

        3.11、多端共用一套接口

        目前常見場(chǎng)景是一個(gè)業(yè)務(wù),同時(shí)有PC頁面和H5頁面,由于業(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ú)有接口;

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

        意義:

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

        4、總結(jié)

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

        篇幅所限,因此無法面面俱到,只提了一些我認(rèn)為比較重要的架構(gòu)層面需要考慮的內(nèi)容,歡迎大家補(bǔ)充。大家如果有自己的看法,歡迎回復(fù)進(jìn)行討論。


        瀏覽 39
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美国产成人精品一区二区三区 | 国产又猛又粗 | 午夜影院毛片 | 欧美裸体片 | 好爽好紧宝贝别夹h | 日日躁夜夜躁aaaabbbb | 男人天堂视频网 | 久久99国产精品 | 亚洲AV无码久久蜜桃麻豆 | 日本性视频网站 |