項(xiàng)目相關(guān)

  1. 技術(shù)要求,需要從技術(shù)棧擴(kuò)展講解
    PC端、APP端、PC客戶端 electron等模式
    vue和react的使用情況,你認(rèn)為有哪些區(qū)別?https://juejin.cn/post/6844904158093377549#heading-7 https://juejin.cn/post/7144648542472044558#heading-16
    vue雙向綁定,響應(yīng)式原理概述?vue3:https://blog.csdn.net/qq_22182989/article/details/125781704
    前端基礎(chǔ)問題? https://juejin.cn/post/7016593221815910408#heading-85
    composition API和options API區(qū)別?https://juejin.cn/post/7114653124131815432
    從URL輸入到建立過程?https://juejin.cn/post/6935232082482298911#heading-39

  2. 項(xiàng)目的亮點(diǎn)展示(具體實(shí)現(xiàn)以及實(shí)現(xiàn)中遇到的問題)
    (1)虛擬滾動(dòng)組件優(yōu)化開發(fā)、vue-virtual-scroller https://juejin.cn/post/6965675310159233037#heading-6
    組件封裝:https://juejin.cn/post/6952777507162554382
    (2)webpack打包性能優(yōu)化、首屏優(yōu)化
    https://juejin.cn/post/6936791056298016775
    (3)Token、單點(diǎn)登錄實(shí)現(xiàn)方案、 https://mp.weixin.qq.com/s/vMhYK7-0ZIgBczWuSpBuuQ
    4 種方案的使用場景:
    Cookie + Session 歷史悠久,適合于簡單的后端架構(gòu),需開發(fā)人員自己處理好安全問題。
    Token 方案對后端壓力小,適合大型分布式的后端架構(gòu),但已分發(fā)出去的 token ,如果想收回權(quán)限,就不是很方便了。
    SSO 單點(diǎn)登錄,適用于中大型企業(yè),想要統(tǒng)一內(nèi)部所有產(chǎn)品的登錄方式。
    OAuth 第三方登錄,簡單易用,對用戶和開發(fā)者都友好,但第三方平臺(tái)很多,需要選擇合適自己的第三方登錄平臺(tái)。
    (4)微前端方案
    singleSpa和乾坤
    父子路由機(jī)制如何解決配置?父應(yīng)用用hash,子應(yīng)用用history?


    項(xiàng)目相關(guān)介紹???

    項(xiàng)目準(zhǔn)備

    star法則

    Situation: 事情是在什么情況下發(fā)生

    Target: 你是如何明確你的目標(biāo)的

    Action: 針對這樣的情況分析,你采用了什么行動(dòng)方式

    Result: 結(jié)果怎樣,在這樣的情況下你學(xué)習(xí)到了什么

    關(guān)于客戶端對接難點(diǎn)推動(dòng)

    S

    • 本部門web和客戶端對接需求比較耗時(shí);
      1, 產(chǎn)品單獨(dú)對接都需要較長工作量,
      ws庫文件各自產(chǎn)品業(yè)務(wù)維護(hù),不便于管理和使用;
      2, 相同功能接口不一致;(下載、路由菜單切換、跳轉(zhuǎn)等)
      3, 網(wǎng)頁貼片視頻播放業(yè)務(wù)場景不滿足!

    T

      1. 輕量化客戶端形成統(tǒng)一對接入口;
      1. 完成通用接口封裝(登錄,登出,?;睿?,以及內(nèi)嵌基礎(chǔ)功能(錄像、實(shí)時(shí)、畫面增強(qiáng)、下載等)
      • websocket
      • reconnect js庫(重連)
      • 兼容bs和 cs(pc app)

    A

    • 和客戶端進(jìn)行websocket對接,確定我們的目標(biāo)功能,自己支持的瀏覽器版本以及場景! 新增npm庫@psi/dss

    • 收集各個(gè)產(chǎn)品的基礎(chǔ)功能,篩選出哪些進(jìn)行庫內(nèi)部支持

    • 自動(dòng)裁剪

    • 選擇器dom傳入處理,有默認(rèn)的!

    計(jì)算剪切區(qū)域,碰撞交叉區(qū)域! requestAnimationFrame更新

    • 貼片計(jì)算位置? requestAnimationFrame 處理

      • 最大的優(yōu)勢是由瀏覽器來決定回調(diào)函數(shù)的執(zhí)行時(shí)機(jī),即緊跟瀏覽器的刷新步調(diào);能保證回調(diào)函數(shù)在屏幕每一次的刷新間隔中只被執(zhí)行一次,這樣就不會(huì)引起丟幀現(xiàn)象,自然不會(huì)導(dǎo)致動(dòng)畫的卡頓

      • CPU節(jié)能:使用setTimeout實(shí)現(xiàn)的動(dòng)畫,當(dāng)頁面被隱藏(隱藏的<iframe>)或最小化(后臺(tái)標(biāo)簽頁)時(shí),setTimeout仍然在后臺(tái)執(zhí)行動(dòng)畫任務(wù),由于此時(shí)頁面處于不可見或不可用狀態(tài),刷新動(dòng)畫是沒有意義的,而且還浪費(fèi) CPU 資源和電池壽命。而
        requestAnimationFrame則完全不同,當(dāng)頁面處于未激活的狀態(tài)下,該頁面的屏幕繪制任務(wù)也會(huì)被瀏覽器暫停,因此跟著瀏覽器步伐走的

        requestAnimationFrame也會(huì)停止渲染,當(dāng)頁面被激活時(shí),動(dòng)畫就從上次停留的地方繼續(xù)執(zhí)行,有效節(jié)省了 CPU 開銷,提升性能和電池壽命。

      • setTimeout問題

        • setTimeout仍然在后臺(tái)執(zhí)行動(dòng)畫任務(wù),由于此時(shí)頁面處于不可見或不可用狀態(tài),刷新動(dòng)畫是沒有意義的,而且還浪費(fèi) CPU 資源和電池壽命
        • 針對屏幕刷新頻率不一致
    • 交互性升級;針對客戶端進(jìn)行版本檢測、版本升級、安裝以及卸載檢測等等;

    R

    • 推廣公安產(chǎn)品使用,最終使得和客戶端對接工作量降低至1人天;

    • 交互性得到質(zhì)的提升

    • 問題:
      后續(xù)還會(huì)針對iframe等內(nèi)嵌進(jìn)行兼容處理; 存在部分問題

      • 第三方嵌入還有哪些方案?

        • 微前端

    項(xiàng)目新技術(shù)執(zhí)行

    lowcode

    微前端singleSpa & 乾坤

    • 關(guān)鍵問題1

      • 1 子應(yīng)用如何定義和使用?

      • 2 如何動(dòng)態(tài)加載?

      • 3 如何隔離?

        • js

          • Proxy沙箱 sandbox
          • 快照沙箱
        • css

          • shadow DOM
          • 前綴約定式隔離BEM
          • CSS module
          • css in js
    • single-SPA

      • 解決問題 1

        • 兼容各種技術(shù)棧

        • 更優(yōu)的性能

          • 每個(gè)獨(dú)立模塊的代碼可做到按需加載,不浪費(fèi)額外資源
        • 無需重構(gòu)現(xiàn)有代碼

        • 每個(gè)獨(dú)立模塊可獨(dú)立運(yùn)行

    • qiankun

      • 解決問題 1-2-3

        • 根據(jù)約定,子應(yīng)用需要暴露聲明周期方法,Qiankun 會(huì)去加載資源然后根據(jù)約定拿到方法,這里官方的推薦是通過 webpack 的 umd 輸出格式來做
        • 在執(zhí)行 js 資源時(shí)通過 eval,會(huì)將 window 綁定到一個(gè) Proxy 對象上,以防污染全局變量,并方便對腳本的 window 相關(guān)操作做劫持處理,達(dá)到子應(yīng)用之間的腳本隔離
    • 鯨落

      • 為啥選用自己鯨落? qiankun不滿足嗎?
      • 做了哪些定制需求?

    nobundle,vite

## 流程推動(dòng)(項(xiàng)目)

### S

- 前端整個(gè)項(xiàng)目開發(fā)流程缺陷,
1. 在項(xiàng)目開發(fā)后,開發(fā)人員有部分功能造成丟失或者缺失,ui,開發(fā)認(rèn)為需求不一致;
2. 部分輕微樣式問題,屢次提到,產(chǎn)品中仍然不少
3. 默認(rèn)性行為系統(tǒng)不一致等

### T

- 1.  確保前端開發(fā)整個(gè)流程閉環(huán),
保證/確保產(chǎn)品,ui,測試感知到的需求一致性;保障產(chǎn)品風(fēng)險(xiǎn)可控
2. 產(chǎn)品轉(zhuǎn)側(cè)前,進(jìn)行有效的代碼評審,有效降低bug量


### A

-  主動(dòng)推動(dòng)項(xiàng)目開發(fā)整體流程;完善流程;
1. 增加模塊前端設(shè)計(jì)文檔,文檔確保涉及的前端/地圖/后端/客戶端等相關(guān)開發(fā)功能無遺漏;該模塊組件拆分,以及難點(diǎn)方案解析,確保整體項(xiàng)目風(fēng)險(xiǎn)可控;
2. 需求開發(fā)完后,拉通測試/產(chǎn)品/開發(fā)進(jìn)行模塊需求反串講,確保需求一致性;
3. 產(chǎn)品確定修改需求,及時(shí)同步開發(fā)/ui
4. 轉(zhuǎn)側(cè)前必定保障模塊進(jìn)行組內(nèi)代碼評審,或者組長評審

### R

- 推廣公安線前端團(tuán)隊(duì),各個(gè)產(chǎn)品開發(fā)中整體完成模塊設(shè)計(jì)和思想;最終確保模塊需求完善;
需求一致性提升,爭議點(diǎn)降低80%;
- 通過完善流程,推出整體流程文檔并進(jìn)行相關(guān)培訓(xùn)

## 代碼重構(gòu)經(jīng)歷

### S

- 1. 接手實(shí)戰(zhàn)項(xiàng)目,局點(diǎn)項(xiàng)目需求需要改動(dòng)局部邏輯點(diǎn)較多;會(huì)有很多問題,一一列舉
代碼中 ----> 單vue組件,js相關(guān)代碼,template相關(guān)代碼量過多,造成代碼維護(hù)性差,可閱讀性差;

2. 函數(shù)功能不單一,影響較大

3. 服務(wù)層未分離;多處維護(hù)可靠性不高

### T

- 目標(biāo):
1.  首先對單個(gè)模塊進(jìn)行重構(gòu),確定單模塊工作量(需求迭代風(fēng)險(xiǎn));
2.  后續(xù)推動(dòng)產(chǎn)品/項(xiàng)目確定重構(gòu)代碼優(yōu)先級,表明重構(gòu)后收益(主要包括:新成員維護(hù)成本,局點(diǎn)項(xiàng)目開發(fā)成本,降低代碼bug量)

### A

- 完成單模塊重構(gòu),
緊隨其后  推動(dòng)完成整體產(chǎn)品重構(gòu)

    - 如何重構(gòu)模塊

        - 提取重復(fù)代碼,封裝成函數(shù)
        - 拆分功能太多的函數(shù)
        - 變量/函數(shù)改名 -- 可讀性
        - 替換算法
        - 以函數(shù)調(diào)用取代內(nèi)聯(lián)代碼
        - 移動(dòng)語句
        - 折分嵌套條件表達(dá)式
        - 將查詢函數(shù)和修改函數(shù)分離

    - 怎么拆分組件顆粒度

        - 布局組件
        - 結(jié)果view組件展示,自適應(yīng)

    - 邏輯處理在哪里維護(hù)

        - container.vue
        - 拆分視圖組件

    - service層抽離

### R

- 重構(gòu)后有明顯收益,依據(jù)工作量安排

    新成員熟悉維護(hù)成本 ---> 降低33% (工作量從3d,到2d)

    局點(diǎn)項(xiàng)目定制開發(fā)成本 ---> 局部功能開發(fā)工作量降低40%(5人天 --> 3人天)

    降低代碼bug量 ---> 降低38%(46 -->28)

學(xué)習(xí)到哪些?
    組件拆分顆粒度;
    形成模塊開發(fā)規(guī)范;
    公安行業(yè)公共組件推出;

### 項(xiàng)目優(yōu)化相關(guān)

優(yōu)化工程: https://juejin.cn/post/6949896020788690958
- 首屏優(yōu)化

    - 提升30%(500ms)
    - 懶加載

        - 長頁面加載過程時(shí),先加載關(guān)鍵內(nèi)容,延遲加載非關(guān)鍵內(nèi)容
        - 圖片懶加載
        - 路由懶加載
        - 滾動(dòng)加載

    - 緩存

        - 資源緩存

    - 離線化
    - 并行化
    - 預(yù)先加載 prefetch

        - dns-prefetch
        - Preconnect

            - TCP握手和TLS

        - prefetch

    - webpack開啟gzip壓縮,文件小速度快
    - CDN

- webpack打包優(yōu)化

    - 開發(fā)環(huán)境

        - DLLPlugin 動(dòng)態(tài)鏈接庫
        - 減少執(zhí)行構(gòu)建的模塊

            - 按需引入類庫模塊

                -  lodash-es.js

            - IgnorePlugin

        - Externals
        - 提升單個(gè)模塊構(gòu)建的速度

            - 配置babel-loader中的 include/exclude,
            - Resolve

                - 置制定的是在構(gòu)建時(shí)指定查找模塊文件的規(guī)則

            - noParse

                - 省略了使用默認(rèn) js 模塊編譯器進(jìn)行編譯的時(shí)間

            - Source Map

        - 并行構(gòu)建以提升總體效率

            - HappyPack 與 thread-loader

    - 生產(chǎn)環(huán)境

        - 面向 JS 的壓縮工具

            - Terser 和 UglifyJS 插件中的效率優(yōu)化

        - 面向 CSS 的壓縮工具

            - CSSMinimizerWebpackPlugin

                - 支持緩存和多進(jìn)程

        - Split Chunks

            - 路由懶加載,分包
            - 多入口
            - 抽取公共代碼,也會(huì)提取出一個(gè)chunk

        - Tree Shaking

- 提取公共組件
- svg/國際化/tree優(yōu)化
- canvas
- echarts

    - 細(xì)化介紹下

## 學(xué)習(xí)的途徑

### github、掘金、簡書等

### vue、vuex、axios、vue-virtual-scorller閱讀源碼
  1. 前端軟知識(shí),軟能力?遇到過哪些問題?

(1)前端負(fù)責(zé)人需要把握的能力?
基礎(chǔ)技能,html、css、js
項(xiàng)目技能,腳手架,APP端,PC端,小程序等
快速掌握和上手新技術(shù)的能力
每一個(gè)負(fù)責(zé)人都有可能面對某個(gè)系統(tǒng)需要用到其他的新技術(shù),或者以前沒有接觸過的技術(shù),這里需要負(fù)責(zé)人有著自己的學(xué)習(xí)方法和學(xué)習(xí)能力,可以在短時(shí)間內(nèi)掌握一門技術(shù),快速進(jìn)入開發(fā),并在開發(fā)的過程當(dāng)中繼續(xù)積累和提高新技術(shù)

指導(dǎo)和幫助初級同學(xué)解決問題
        這個(gè)環(huán)節(jié)不能缺失,這里就要求技術(shù)全面和思想指導(dǎo)。當(dāng)在幫助初級同學(xué)解決問題的時(shí)候,不是僅僅只是在給他們解決問題,更重要的一點(diǎn)是雙方之間在進(jìn)行技術(shù)溝通和思路解決方案。對大家都有提升。
        提升負(fù)責(zé)人的技術(shù)全面性,和溝通能力,問題解決能力
        提升初級同學(xué)的知識(shí)面,了解其他人對于這個(gè)問題的思考

(2)工作中和前端、后端、測試如何溝通?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容