IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue性能优化写法 -> 正文阅读

[JavaScript知识库]Vue性能优化写法

分享3个提升Vue性能的写法

在这里插入图片描述

  1. 监听对象的单个属性
  2. 处理不需要响应式的数据
  3. 利用钩子函数销毁定时器

1.监听对象的单个属性

场景:监听一个person对象,person对象的id发生变化,发起网络请求

一般写法:

watch: {
    // person的任意属性发生改变, 都会触发函数
    'person': function () {
      do something ...
    },
    deep:true
  }

优化写法:

watch: {
    // 如果person的id属性发生改变,这个函数就会运行
    // person的其他属性发生改变, 不触发
    'person.id.': function () {
      do something ...
    }
  }

2.处理不需要响应式的数据

Vue通过Object.defineProperty劫持对象实现响应式,这个过程将耗费一定性能。
特殊处理一些初始化后就不变的数据,让Vue不对它们进行劫持,可以优化性能

一般写法

data: function () {
  return {
  	// 不需要响应式的对象
  	constantObj:{ name:'xixi', age:12, skill:'singing' }
  	constantArr:[...]
  	// 需要响应式的对象
    nomalObj:{ name:'haha', age:24, skill:'skiing' }
  }
}

优化写法1:

data: function () {
	// 不需要响应式的对象
  	this.constantObj = { name:'xixi', age:12, skill:'singing' }
  	this.constantArr = [...]
    return {
  	  // 需要响应式的对象
      nomalObj:{ name:'haha', age:24, skill:'skiing' }
  }
}

优化写法2:

// Object.freeze() 可以将object的 configurable 属性置为false
// Vue 在遇到 configurable 为 false 这样被设置为不可配置之后的对象属性时 不会为对象加上 setter getter 等数据劫持的方法
data: function () {
    return {
  	  // 需要响应式的对象
      nomalObj:{ name:'haha', age:24, skill:'skiing' }
      // 不需要响应式的对象
  	this.constantObj = Object.freeze({ name:'xixi', age:12, skill:'singing' })
  	this.constantArr = Object.freeze([...])
  }
}

3. 利用钩子函数销毁定时器

场景:时间显示
在这里插入图片描述
一般写法

<template>
  <div v-text="currentTime"></div>
</template>

data: function () {
    return {
  	currentTime: moment().format('HH: mm: ss')
  }
}
created() {
	// 这样写组件销毁了定时器依然在运行
	setInterval(() => {
      this.currentTime = moment().format('HH: mm: ss')
    }, 1000)
}

每定义一个计时器,就会在计时器线程的队列里面新加入一个排队的计时器。即使这个你跳转到另外一个页面,这个队列仍然存在。等计时器的一到,就会把这个计时器要执行的内容从队列拿出来开始执行。

优化写法1 :

<template>
  <div v-text="currentTime"></div>
</template>

data: function () {
    return {
    timer:null
  	currentTime: moment().format('HH: mm: ss')
  }
}
created() {
	// 这样写组件销毁了定时器依然在运行
	this.timer = setInterval(() => {
      this.currentTime = moment().format('HH: mm: ss')
    }, 1000)
}
beforeDestory(){
    clearInterval(this.timer);
    this.timer = null;
}

优化写法2 :

<template>
  <div v-text="currentTime"></div>
</template>

data: function () {
    return {
  	  currentTime: moment().format('HH: mm: ss')
  }
}
created() {
	this.startTime()
}
methods:{
    startTime(){
      let timer = setInterval(()=>{
       this.currentTime = moment().format('HH: mm: ss')
      },1000);
      // hook函数优化写法清除定时器 相比第一种不用在打他里定义timer,更简洁
      this.$once('hook:beforeDestroy',()=>{
        clearInterval(timer);
        timer = null;
      })
    }
 }

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:49:36  更:2021-07-17 11:51:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 18:17:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码