项目产出及思考【未完成】

243 阅读3分钟

项目1:数据可视化

产出1:多接口复用

  • 背景
  1. 多个功能,本质上都是对表格数据进行筛选
  2. 和后端同学达成一致意见,这些功能只用一个接口搞定
  3. 前端这边的工作就是每个功能传输不一样的参数

image.png

  • 初期处理

每个功能对应一个函数,触发时创造参数对象,然后调用 getTableList 方法

image.png

async functionN (){
    const params = {
        ...
    };
    const res = await getTableList(params);
    console.log(res);
}
  • 问题出现及分析

无法记忆/修改之前的操作:

image.png

分析:这些功能都是为了筛选表格数据,用的是同一个接口,只是传递参数不一样而已

image.png

  • 优化解决

设定一个共同的容器,往里面新增、删除、修改参数

image.png

  • 结果

可以记忆和修改之前的筛选条件

产出2:多弹窗复用

  • 背景 弹窗种类繁多,但彼此包含相同的子模块

  • 初期处理

虽然用的是同一个弹窗,但是内容是用 if....else 来分开内容

<template>
  <modal v-if="type==='copy'">
  </modal>
  <modal v-else-if="type==='rename'">
  </modal>
  <modal v-else-if="type==='remove'">
  </modal>
  ...
</template>
  • 问题出现

if...else... 的数量取决于弹窗种类数量,并没有从本质上解决问题

  • 优化解决

不要用 if...else... 来控制弹窗内容,而是用 if...else... 来控制子模块在哪种类型的弹窗中显示

image.png

  • 结果

if...else... 的数量不是取决于弹窗种类数量,而是取决于子模块的种类数量

<template>
  <section v-if="type==='copy'">
  </section>
  <section v-else-if="type==='copy'||type==='publish'">
  </section>
  <section v-else-if="type==='remove'||type==='publish'">
  </section>
  ...
</template>
  • 继续优化

(模板字符串的利用)

产出3:数据反馈及减少 Observer 的开销

  • 背景

右边区域的组件要对主体区域的图表组件的图表属性进行设置

  • 初期处理

右边区域的组件关闭之后触发事件将表单数据传递到主体组件中,完成更新渲染(更新设置图表属性)

image.png

  • 方案调研

  • 问题出现

直接将表单数据(一个对象)替换整个图表属性数据对象,会导致 Observer 的监听项数量直接拉满

证明如下:基于 vue 2.x 是利用 Object.defineProperty 来实现数据双向绑定的(即使值没有发生改变,但有发生替换就会被 Observer 监听到)

image.png

  • 优化解决

不要直接替换整个对象,而是找出修改项,然后在图表属性数据对象里修改对应项

image.png

image.png

  • 结果

大大减少了 Observer 的开销:Observer 监听项从总共的 80 项减少为修改项的数量

image.png image.png

项目2:头像表情包小程序

Canvas

HTML系列 -- Canvas

产出1:解决图像、文字绘制模糊问题

  • 原因

  • 方案调研

  • 解决

  • 结果

产出2:分层画布,减少重复内容绘制

  • 背景

  • 方案调研

  • 初期处理

  • 问题出现

  • 优化解决

  • 结果

项目3:智慧餐厅服务系统

产出1:各机型适配

CSS系列 -- 自适应布局

  • 背景

  • 方案调研

  • 初期处理

  • 问题出现

  • 优化解决

  • 结果

产出2:侧边栏与主体内容同步

  • 背景

  • 方案调研

  • 初期处理

  • 问题出现

  • 优化解决

  • 结果

产出3:登录态的开发

cookie、session、Token、JWT及对应的登录态机制