前端开发中的常见优化

目录

外观

兼容

不同尺寸(包裹,height:100%)

[不同 浏览器 隐藏滚动条 的 不同属性名](#不同 浏览器 隐藏滚动条 的 不同属性名)

重排->重绘

[不显示 display:none->禁用disable](#不显示 display:none->禁用disable)

性能

导航重复(修改原型push、replace方法)

[搜索防抖 import { debounce } from 'lodash'](#搜索防抖 import { debounce } from 'lodash')

严谨性

少用any类型

路由参数query和params


外观

兼容

不同尺寸(包裹,height:100%)

css 复制代码
.workbench-create {
  height: 100%;
  display: flex;
}

不同 浏览器 隐藏滚动条 的 不同属性名

css 复制代码
.left-wrap {
    height: 100%;
    overflow: auto;
    flex: 1;
    padding-left: 40px;
    //隐藏元素的滚动条。这通常用于自定义滚动条样式。
    scrollbar-width: none;
    /* Firefox */
    -ms-overflow-style: none;

    /* IE 10+ */
    &::-webkit-scrollbar {
    //伪元素选择器,用于选择Webkit浏览器(如Chrome、Safari等)中的滚动条。
      display: none;
      /* Chrome Safari */
    }

重排->重绘

不显示 display:none->禁用disable

性能

导航重复(修改原型push、replace方法)

push:将新的路由添加到浏览器的历史记录中,这样用户就可以通过浏览器的后退按钮回到之前的路由。

this.$router.push('/about')

replace:不会在浏览器的历史记录中留下新的条目,而是直接替换当前的历史记录条目。

this.$router.replace('/contact')

比如在处理登录 页面时,登录成功后可能会用replace方法替换当前路由,以防止用户通过后退按钮回到登录页面。

修改 VueRouter 的原型方法 pushreplace,用来捕获导航重复错误并进行处理,

不会在控制台中抛出错误,从而避免了不必要的错误提示和潜在的问题。

TypeScript 复制代码
import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => {
    if (err.name !== 'NavigationDuplicated') {
      throw err;
    }
  });
};

const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function replace(location) {
  return originalReplace.call(this, location).catch(err => {
    if (err.name !== 'NavigationDuplicated') {
      throw err;
    }
  });
};

const router = new VueRouter({
  // 路由配置...
});

export default router;

搜索防抖 import { debounce } from 'lodash'

html 复制代码
    <mds-select
              style="width: 480px"
              v-model="formData.applyOa"
              :multiple="true"
              placeholder="选择或搜索OA"
              filterable
              :remote="true"
              :remote-method="searchOA"
              :disabled="showDetail"
              clearable
              @change="changeOA"
            >
              <mds-option
                class="select-oaAndDept"
                v-for="item in OAoptions"
                :key="item.oa"
                :value="item.empOa"
                :label="item.empNmAndOa"
              >
                <div class="select-name">
                  {{ item.empNmAndOa }}
                  <div class="select-dept">{{ item.deptNm }}</div>
                </div>
              </mds-option>
            </mds-select>
TypeScript 复制代码
import { debounce } from 'lodash'

//防抖
// OA list
  OAoptions: any = []
  searchOA = debounce(this.searchOaAPi, 500)
  searchOaAPi(val: any) {
    bspUserInfoFuzzyQueryOaList({
      empOaOrNm: val,
      partitionDt: ''
    }).then((res: any) => {
      if (res && res.code == 200) {
        this.OAoptions = res.data
      } else {
        this.$message.error(res.msg || '系统错误')
      }
    }).catch((e: any) => {
      this.$message.error(e.msg)
    })
  }

严谨性

少用any类型

路由参数query和params

相关推荐
lihui_cbdd10 小时前
HPC 集群上 OpenMM GPU 多版本安装实战指南
运维·服务器·人工智能·计算化学
二等饼干~za89866811 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
Xpower 1711 小时前
MCP 服务器暴露在公网:AI Agent 工具层正在变成新的安全边界
服务器·人工智能·安全
我材不敲代码11 小时前
Python 函数核心:位置参数与关键字参数详解
java·前端·python
数据库小学妹11 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan12311 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
Elastic 中国社区官方博客11 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_3331209711 小时前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
YL2004042611 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
mh_f11 小时前
33.批量通过GET链接下载图片到指定文件夹下
java