前端开发中的常见优化

这篇具有很好参考价值的文章主要介绍了前端开发中的常见优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

外观

组件库(无法满足->接口?->自定义/封装)

兼容

判断浏览器环境

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

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

重排->重绘

不显示 display:none->禁用disable 

性能

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

scss、js元素选择器尽可能精准:全局/局部

远程搜索条数较多时,防抖 import { debounce } from 'lodash'

代码

root&&stack.push(root)

安全

url.replace('http://', 'https://')

严谨性

少用any类型

路由参数query和params

判断后端数据时才用===


(因为leader不在编码一线,所以优化的点 leader可能安排不了

试用期/裁员期/上升期:按时完成安排的任务是底线要求,优化是额外关卡:

从积累技术文档优化性能,发现潜在的问题,warning思考合理性,到封装项目通用组件。

汇报也不要只说流水账,先展示流程,然后再讲优化/解决的问题,重点应该在上面的额外关卡,哪怕只是思考也行)

外观

组件库(无法满足->接口?->自定义/封装)

无论是ele/martix的tabs,display:none都无效,但组件库很少有问题

默认样式不行的时候,先看文档有没有提供接口,如果没有提供接口,并且需要手动修改的地方较多,就自定义/封装(如果需要重复使用)

兼容

判断浏览器环境

export default function browserInfo() {
  // 定义变量sBrowser用于存储浏览器名称
  // 定义变量sUsrAg用于存储用户代理字符串
  var sBrowser,
    sUsrAg = navigator.userAgent

  // 以下按顺序检查用户代理字符串中是否包含特定浏览器的标识,以判断用户使用的是哪种浏览器。

  // 如果用户代理字符串中包含"Firefox",则判断为Mozilla Firefox浏览器
  if (sUsrAg.indexOf('Firefox') > -1) {
    sBrowser = 'Mozilla Firefox'
    // 用户代理字符串示例:"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
  } 
  // 如果用户代理字符串中包含"Opera"或者"OPR",则判断为Opera浏览器
  else if (sUsrAg.indexOf('Opera') > -1 || sUsrAg.indexOf('OPR') > -1) {
    sBrowser = 'Opera'
    // 用户代理字符串示例:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106"
  } 
  // 如果用户代理字符串中包含"Trident",则判断为Microsoft Internet Explorer浏览器
  else if (sUsrAg.indexOf('Trident') > -1) {
    sBrowser = 'Microsoft Internet Explorer'
    // 用户代理字符串示例:"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko"
  } 
  // 如果用户代理字符串中包含"Edge",则判断为Microsoft Edge浏览器
  else if (sUsrAg.indexOf('Edge') > -1) {
    sBrowser = 'Microsoft Edge'
    // 用户代理字符串示例:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
  } 
  // 如果用户代理字符串中包含"Chrome",则判断为Google Chrome或者Chromium浏览器
  else if (sUsrAg.indexOf('Chrome') > -1) {
    sBrowser = 'Google Chrome or Chromium'
    // 用户代理字符串示例:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36"
  } 
  // 如果用户代理字符串中包含"Safari",则判断为Apple Safari浏览器
  else if (sUsrAg.indexOf('Safari') > -1) {
    sBrowser = 'Apple Safari'
    // 用户代理字符串示例:"Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306"
  } 
  // 如果以上条件都不满足,则浏览器名称为"unknown",表示未知浏览器
  else {
    sBrowser = 'unknown'
  }

  // 最后,返回一个布尔值,指示用户是否使用Chrome浏览器(如果是Chrome浏览器,返回true;否则返回false)
  return sUsrAg.indexOf('Chrome') > -1
}

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

前端开发中的常见优化,前端,开发,java,数据库,服务器

前端开发中的常见优化,前端,开发,java,数据库,服务器

.workbench-create {
  height: 100%;
  display: flex;
}

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

.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,用来捕获导航重复错误并进行处理,

不会在控制台中抛出错误,从而避免了不必要的错误提示和潜在的问题。文章来源地址https://www.toymoban.com/news/detail-605297.html

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;

scss、js元素选择器尽可能精准:全局/局部

远程搜索条数较多时,防抖 import { debounce } from 'lodash'

    <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>
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)
    })
  }

代码

root&&stack.push(root)

安全

url.replace('http://', 'https://')

严谨性

少用any类型

路由参数query和params​​​​​​​

判断后端数据时才用===

到了这里,关于前端开发中的常见优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA-软开-常见八股文(2)-数据库相关

    1 Drop Delete Truncate三者之间的区别和联系 drop删除整张表,包括表结构和表数据。用法 drop table 表名 truncate表示清空数据,不会删除表结构。truncate table 表名 delete表示删除数据,不会删除表结构。delete from 表名 where 列名 = 值, 那么,truncate和delete的区别:             trunca

    2024年02月06日
    浏览(34)
  • 常见java,数据库锁汇总篇,舍我其谁

    1.乐观锁 在select的时候不会加锁,是基于程序实现的,所以不会存在死锁的情况。 适用于读多写少的场景(写的并发量相对不高),可以提高系统的吞吐量。 因为如果写多的话,乐观锁会有很大机率更新失败,需要不断的自旋执行查找和更新操作。 自旋的时候会一直占用

    2024年01月25日
    浏览(20)
  • Web开发:django+前端+数据库(7)

    Python知识点:函数、面向对象 前端开发:HTML、CSS、Javascript、jQuery、Bootstrap MySQL数据库 Python的Web框架:Flask和Django 1.  安装django pip install django 2.  创建项目 专业版的pycharm可以直接创建django项目,如果时社区版的pycharm可以参考一下这篇博客(http://t.csdnimg.cn/aMlBu),直接从终

    2024年02月21日
    浏览(36)
  • java八股文面试[数据库]——慢查询优化

    分析慢查询日志 直接分析慢查询日志, mysql使用 explain + sql语句进行模拟优化器来执行分析。 oracle使用explain plan for + sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释: table 显示这一行的数据是关于哪张表的 type 这是重要的

    2024年02月10日
    浏览(29)
  • Springboot通过前端发起请求,拿到数据库中的数据并生成excel表格,postman请求并下载文件

    springboot版本3.2.0,数据库版本8 mybatisplus版本3.5.4.1 依赖 实体类 实体类中的枚举类型转换,因调用方法后还是不能转换类型所以暂未解决 Controller层 postman测试 Excel表格 获取数据成功

    2024年01月18日
    浏览(31)
  • Jeecg开发框架前端VUE2数据页面与后端数据库交互实现

    ​ JeecgBoot 是一款基于代码生成器的 低代码 开发平台,零代码开发!采用前后端分离架构:SpringBoot2.x,Ant DesignVue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! JeecgBoot引领新的开发模式(Online Coding模式- 代码生成器模式- 手工MERGE智能开发

    2024年02月11日
    浏览(30)
  • python使用flask实现前后端分离&通过前端修改数据库数据【全栈开发基础】

    完整代码放到了最后,时间紧张的话直接拉到最后或点击目录【🥩 完整代码】看完整代码 这里先提一下,我们运行后端代码之前需要先建立一个名字为 python 的数据库,而后在该数据库下创建表 userinfo ,因为看到有的朋友后端代码拿过去后会运行不起来或者就是直接报错了

    2023年04月09日
    浏览(32)
  • Java与数据库:JDBC和ORM框架的使用和效率优化

      随着互联网的快速发展和大数据时代的到来,数据库在软件开发中起到了至关重要的作用。Java作为一门强大而广泛应用的编程语言,提供了多种与数据库交互的方式。其中,JDBC和ORM框架是最常用的两种方式。本文将深入探讨JDBC和ORM框架的使用方法,并分享一些提高效率的

    2024年02月08日
    浏览(30)
  • 【数据库】执行计划中的两趟算法机制原理,基于排序算法来分析,算法的限制,执行代价以及优化

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月05日
    浏览(33)
  • [开发|数据库] java程序人大金仓数据库适配笔记

    需要去人大金仓https://www.kingbase.com.cn/qd/index.htm下载linux版iso文件和授权文件(license-企业版-90天)。 iso文件需要挂载在指定目录下。 参考:(https://www.cnblogs.com/bluestorm/p/16941812.html)。 人大金仓数据库安装过程中出现乱码/内容不显示是因为jdk版本不匹配,通过asdf更换java版本为

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包