首页 > 其他分享 >vue表格大量input框渲染性能优化

vue表格大量input框渲染性能优化

时间:2022-10-17 08:55:33浏览次数:45  
标签:vue span 表格 输入框 inputStatus input border 1000

背景

有一个表格,想要通过输入框编辑内容,但是在性能低下的电脑渲染1000+的输入框时该页面存在加载缓慢的问题
image.png

原因

不同的dom渲染消耗的内存是不一样的,input输入框消耗比较大,通过1000个输入框在本地性能CPU调节为4倍降速时,通过(performance.timing.domComplete - performance.timing.navigationStart)/1000计算得到的首屏加载速度为优化前是平均为17s,优化后是平均为10s.

思路

1、span比input输入框性能消耗低
2、通过span与input输入框样式保持一致,伪造input输入框
3、点击span时激活input输入框,并激活输入光标
4、将其封装成一个独立的组件进行复用

代码

伪输入框组件代码
<template>
  <div class="fake-content">
    <!-- 原生input -->
    <!-- <input v-if="inputStatus" ref="myInput" class="fake-input" :value="value" @input="$emit('input', $event.target.value)" @blur="handleInputBlur"> -->
    <!-- element ui的input -->
    <el-input v-if="inputStatus" ref="myInput" :value="value" @input="$emit('input', $event)" @blur="handleInputBlur" />
    <span v-else class="fake-input" @click="handleSwitchShowStatus">{{ value }}</span>
  </div>
</template>

<script>
export default {
  name: 'FakeInput',
  props: {
    value: {
      type: [String, Number],
      default: ''
    }
  },
  data() {
    return {
      inputStatus: false
    }
  },
  methods: {
    handleInputBlur() {
      this.inputStatus = false
    },
    handleSwitchShowStatus() {
      this.inputStatus = true
      // dom更新完后再执行,否则input框还未存在。
      this.$nextTick(() => {
        this.$refs.myInput.focus()
      })
    }
  }
}
</script>

<style lang="scss" scoped>
  .fake-content {
    height: inherit;
    // 使用el-input的样式
     .fake-input {
      display: inline-block;
      width: 100%;
      height: inherit;
      font-size: inherit;
      border-radius: 4px;
      border: 1px solid #DCDFE6;
      box-sizing: border-box;
      color: #606266;
      // outline: 0; // 使用原生input时需要加
      padding: 0 15px;
    }
  }
</style>
伪输入框组件应用
<FakeInput v-model="value"/>

标签:vue,span,表格,输入框,inputStatus,input,border,1000
From: https://www.cnblogs.com/Sultan-ST/p/16797890.html

相关文章

  • vue-element图片上传
    <el-upload action="" :limit="1" :on-change="handleChange" :auto-upload="false" :file-list="fileList" :show-file-list="false"> <span>选择文件</span></e......
  • [转] VUE 的常用指令
    <divid="app"><pv-text="username"></p><pv-text="gender">性别</p><p>姓名:{{username}}</p><p>性别:{{gender}}</p>......
  • Vue CLI的详细介绍与讲解
    目录什么是VueCLICLI是什么意思?VueCLI使用前提安装Node.JScnpm安装VueCLI使用前提-WebpackVueCLI的使用VueCLI2选项详解目录结构详细Runtime-Compiler和Runtime-on......
  • Vue.js -- 样式绑定
    前言本文主要介绍了vue.js样式绑定的几种形式。class字符串形式代码演示:<!DOCTYPEhtml><htmllang="en"><head><title>vue样式绑定</title><scriptsrc=......
  • Vue组件和插件
    两者的区别组件注册通过“Vue.component”或“components”属性,而插件通过“Vue.use()”;组件是用来构成App的业务模块,它的目标是“App.vue”,而插件是用来增强技术栈的功......
  • 第一章 Vue基础入门
    文章目录​​引言​​​​1.快速入门​​​​1.1.创建项目​​​​1.2.模型和视图​​​​1.3.双向数据绑定​​​​2.{{}}-插值​​​​2.1.语法​​​​2.2.案例​​​......
  • Vue事件不带参数和带一个参数
    <script>exportdefault{ data(){  return{   message:0,   put1:'www.96net.com.cn',  } }, methods:{  dianji(p){   ......
  • Vue事件对象如何调用
    <script>exportdefault{ data(){  return{   message:0,   put1:'www.96net.com.cn',  } }, methods:{  dianji(e){   ......
  • Vue2全家桶
    Vue2全家桶1.Vue.js是什么?1).一位华裔前Google工程师(尤雨溪)开发的前端js库2).作用:动态构建用户界面3).特点:*遵循MVVM模式*编码简洁,体积小,......
  • 解决Vue打印带有echarts的pdf问题
    智能中医项目中开发一个打印报告,报告里有患者的基本信息、病况和echarts展示的一些图表,解决了一下午终于解决。彩色打印效果如下:总体效果还是不错,汇总一下处理方法。修......