项目相关

  1. 技术要求,需要从技术栈扩展讲解
    PC端、APP端、PC客户端 electron等模式
    vue和react的使用情况,你认为有哪些区别?https://juejin.cn/post/6844904158093377549#heading-7 https://juejin.cn/post/7144648542472044558#heading-16
    vue双向绑定,响应式原理概述?vue3:https://blog.csdn.net/qq_22182989/article/details/125781704
    前端基础问题? https://juejin.cn/post/7016593221815910408#heading-85
    composition API和options API区别?https://juejin.cn/post/7114653124131815432
    从URL输入到建立过程?https://juejin.cn/post/6935232082482298911#heading-39

  2. 项目的亮点展示(具体实现以及实现中遇到的问题)
    (1)虚拟滚动组件优化开发、vue-virtual-scroller https://juejin.cn/post/6965675310159233037#heading-6
    组件封装:https://juejin.cn/post/6952777507162554382
    (2)webpack打包性能优化、首屏优化
    https://juejin.cn/post/6936791056298016775
    (3)Token、单点登录实现方案、 https://mp.weixin.qq.com/s/vMhYK7-0ZIgBczWuSpBuuQ
    4 种方案的使用场景:
    Cookie + Session 历史悠久,适合于简单的后端架构,需开发人员自己处理好安全问题。
    Token 方案对后端压力小,适合大型分布式的后端架构,但已分发出去的 token ,如果想收回权限,就不是很方便了。
    SSO 单点登录,适用于中大型企业,想要统一内部所有产品的登录方式。
    OAuth 第三方登录,简单易用,对用户和开发者都友好,但第三方平台很多,需要选择合适自己的第三方登录平台。
    (4)微前端方案
    singleSpa和乾坤
    父子路由机制如何解决配置?父应用用hash,子应用用history?


    项目相关介绍???

    项目准备

    star法则

    Situation: 事情是在什么情况下发生

    Target: 你是如何明确你的目标的

    Action: 针对这样的情况分析,你采用了什么行动方式

    Result: 结果怎样,在这样的情况下你学习到了什么

    关于客户端对接难点推动

    S

    • 本部门web和客户端对接需求比较耗时;
      1, 产品单独对接都需要较长工作量,
      ws库文件各自产品业务维护,不便于管理和使用;
      2, 相同功能接口不一致;(下载、路由菜单切换、跳转等)
      3, 网页贴片视频播放业务场景不满足!

    T

      1. 轻量化客户端形成统一对接入口;
      1. 完成通用接口封装(登录,登出,保活),以及内嵌基础功能(录像、实时、画面增强、下载等)
      • websocket
      • reconnect js库(重连)
      • 兼容bs和 cs(pc app)

    A

    • 和客户端进行websocket对接,确定我们的目标功能,自己支持的浏览器版本以及场景! 新增npm库@psi/dss

    • 收集各个产品的基础功能,筛选出哪些进行库内部支持

    • 自动裁剪

    • 选择器dom传入处理,有默认的!

    计算剪切区域,碰撞交叉区域! requestAnimationFrame更新

    • 贴片计算位置? requestAnimationFrame 处理

      • 最大的优势是由浏览器来决定回调函数的执行时机,即紧跟浏览器的刷新步调;能保证回调函数在屏幕每一次的刷新间隔中只被执行一次,这样就不会引起丢帧现象,自然不会导致动画的卡顿

      • CPU节能:使用setTimeout实现的动画,当页面被隐藏(隐藏的<iframe>)或最小化(后台标签页)时,setTimeout仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态,刷新动画是没有意义的,而且还浪费 CPU 资源和电池寿命。而
        requestAnimationFrame则完全不同,当页面处于未激活的状态下,该页面的屏幕绘制任务也会被浏览器暂停,因此跟着浏览器步伐走的

        requestAnimationFrame也会停止渲染,当页面被激活时,动画就从上次停留的地方继续执行,有效节省了 CPU 开销,提升性能和电池寿命。

      • setTimeout问题

        • setTimeout仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态,刷新动画是没有意义的,而且还浪费 CPU 资源和电池寿命
        • 针对屏幕刷新频率不一致
    • 交互性升级;针对客户端进行版本检测、版本升级、安装以及卸载检测等等;

    R

    • 推广公安产品使用,最终使得和客户端对接工作量降低至1人天;

    • 交互性得到质的提升

    • 问题:
      后续还会针对iframe等内嵌进行兼容处理; 存在部分问题

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

        • 微前端

    项目新技术执行

    lowcode

    微前端singleSpa & 乾坤

    • 关键问题1

      • 1 子应用如何定义和使用?

      • 2 如何动态加载?

      • 3 如何隔离?

        • js

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

          • shadow DOM
          • 前缀约定式隔离BEM
          • CSS module
          • css in js
    • single-SPA

      • 解决问题 1

        • 兼容各种技术栈

        • 更优的性能

          • 每个独立模块的代码可做到按需加载,不浪费额外资源
        • 无需重构现有代码

        • 每个独立模块可独立运行

    • qiankun

      • 解决问题 1-2-3

        • 根据约定,子应用需要暴露声明周期方法,Qiankun 会去加载资源然后根据约定拿到方法,这里官方的推荐是通过 webpack 的 umd 输出格式来做
        • 在执行 js 资源时通过 eval,会将 window 绑定到一个 Proxy 对象上,以防污染全局变量,并方便对脚本的 window 相关操作做劫持处理,达到子应用之间的脚本隔离
    • 鲸落

      • 为啥选用自己鲸落? qiankun不满足吗?
      • 做了哪些定制需求?

    nobundle,vite

## 流程推动(项目)

### S

- 前端整个项目开发流程缺陷,
1. 在项目开发后,开发人员有部分功能造成丢失或者缺失,ui,开发认为需求不一致;
2. 部分轻微样式问题,屡次提到,产品中仍然不少
3. 默认性行为系统不一致等

### T

- 1.  确保前端开发整个流程闭环,
保证/确保产品,ui,测试感知到的需求一致性;保障产品风险可控
2. 产品转侧前,进行有效的代码评审,有效降低bug量


### A

-  主动推动项目开发整体流程;完善流程;
1. 增加模块前端设计文档,文档确保涉及的前端/地图/后端/客户端等相关开发功能无遗漏;该模块组件拆分,以及难点方案解析,确保整体项目风险可控;
2. 需求开发完后,拉通测试/产品/开发进行模块需求反串讲,确保需求一致性;
3. 产品确定修改需求,及时同步开发/ui
4. 转侧前必定保障模块进行组内代码评审,或者组长评审

### R

- 推广公安线前端团队,各个产品开发中整体完成模块设计和思想;最终确保模块需求完善;
需求一致性提升,争议点降低80%;
- 通过完善流程,推出整体流程文档并进行相关培训

## 代码重构经历

### S

- 1. 接手实战项目,局点项目需求需要改动局部逻辑点较多;会有很多问题,一一列举
代码中 ----> 单vue组件,js相关代码,template相关代码量过多,造成代码维护性差,可阅读性差;

2. 函数功能不单一,影响较大

3. 服务层未分离;多处维护可靠性不高

### T

- 目标:
1.  首先对单个模块进行重构,确定单模块工作量(需求迭代风险);
2.  后续推动产品/项目确定重构代码优先级,表明重构后收益(主要包括:新成员维护成本,局点项目开发成本,降低代码bug量)

### A

- 完成单模块重构,
紧随其后  推动完成整体产品重构

    - 如何重构模块

        - 提取重复代码,封装成函数
        - 拆分功能太多的函数
        - 变量/函数改名 -- 可读性
        - 替换算法
        - 以函数调用取代内联代码
        - 移动语句
        - 折分嵌套条件表达式
        - 将查询函数和修改函数分离

    - 怎么拆分组件颗粒度

        - 布局组件
        - 结果view组件展示,自适应

    - 逻辑处理在哪里维护

        - container.vue
        - 拆分视图组件

    - service层抽离

### R

- 重构后有明显收益,依据工作量安排

    新成员熟悉维护成本 ---> 降低33% (工作量从3d,到2d)

    局点项目定制开发成本 ---> 局部功能开发工作量降低40%(5人天 --> 3人天)

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

学习到哪些?
    组件拆分颗粒度;
    形成模块开发规范;
    公安行业公共组件推出;

### 项目优化相关

优化工程: https://juejin.cn/post/6949896020788690958
- 首屏优化

    - 提升30%(500ms)
    - 懒加载

        - 长页面加载过程时,先加载关键内容,延迟加载非关键内容
        - 图片懒加载
        - 路由懒加载
        - 滚动加载

    - 缓存

        - 资源缓存

    - 离线化
    - 并行化
    - 预先加载 prefetch

        - dns-prefetch
        - Preconnect

            - TCP握手和TLS

        - prefetch

    - webpack开启gzip压缩,文件小速度快
    - CDN

- webpack打包优化

    - 开发环境

        - DLLPlugin 动态链接库
        - 减少执行构建的模块

            - 按需引入类库模块

                -  lodash-es.js

            - IgnorePlugin

        - Externals
        - 提升单个模块构建的速度

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

                - 置制定的是在构建时指定查找模块文件的规则

            - noParse

                - 省略了使用默认 js 模块编译器进行编译的时间

            - Source Map

        - 并行构建以提升总体效率

            - HappyPack 与 thread-loader

    - 生产环境

        - 面向 JS 的压缩工具

            - Terser 和 UglifyJS 插件中的效率优化

        - 面向 CSS 的压缩工具

            - CSSMinimizerWebpackPlugin

                - 支持缓存和多进程

        - Split Chunks

            - 路由懒加载,分包
            - 多入口
            - 抽取公共代码,也会提取出一个chunk

        - Tree Shaking

- 提取公共组件
- svg/国际化/tree优化
- canvas
- echarts

    - 细化介绍下

## 学习的途径

### github、掘金、简书等

### vue、vuex、axios、vue-virtual-scorller阅读源码
  1. 前端软知识,软能力?遇到过哪些问题?

(1)前端负责人需要把握的能力?
基础技能,html、css、js
项目技能,脚手架,APP端,PC端,小程序等
快速掌握和上手新技术的能力
每一个负责人都有可能面对某个系统需要用到其他的新技术,或者以前没有接触过的技术,这里需要负责人有着自己的学习方法和学习能力,可以在短时间内掌握一门技术,快速进入开发,并在开发的过程当中继续积累和提高新技术

指导和帮助初级同学解决问题
        这个环节不能缺失,这里就要求技术全面和思想指导。当在帮助初级同学解决问题的时候,不是仅仅只是在给他们解决问题,更重要的一点是双方之间在进行技术沟通和思路解决方案。对大家都有提升。
        提升负责人的技术全面性,和沟通能力,问题解决能力
        提升初级同学的知识面,了解其他人对于这个问题的思考

(2)工作中和前端、后端、测试如何沟通?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目整体设计为前后端完全分离的模式,前端采用react以及amazeui构建用户交互界面,后端采用python f...
    arcsecw阅读 5,281评论 0 2
  • 在使用Flask做项目的过程中,总结了一些知识点,因此写了这份笔记,主要内容有: 兼容带 / 的URL修改代码后如...
    cynthia猫阅读 8,547评论 0 7
  • 楔子 本文的有些git命令是基于我本地的git alias,如下做下解释: 项目背景 开发项目特别是团队协作的项目...
    VienFu阅读 3,593评论 0 4
  • 主动提现项目需求来源:由于合规需求和存管因素,存管端自动提现接口随时可能关停,为应对关停风险,将资金从用户虚户到用...
    pm_kai阅读 1,189评论 0 0
  • 导语: 今天为大家带来的是项目的相关方管理的主题。本次的主题会从2个大模块展开: 一是基于PMP第13章项目相关方...
    凡凡滕阅读 15,323评论 0 2