前端喵前端喵
  • 🎹leetcode算法
  • 🌲后台管理项目
  • 🍎八股文
GithHub
  • 🎹leetcode算法
  • 🌲后台管理项目
  • 🍎八股文
GithHub
  • 首页
  • 系统笔记

    • leetcode算法笔记大全
    • 前端八股文笔记大全
    • 后台管理项目0-1搭建笔记
    • 后台管理项目脚手架0-1搭建笔记
  • 技术文章

    • 常见的性能优化手段
    • 如何修改gitignore并删除远程的ignore文件
    • 如何给GitHub项目提交pr
    • 小米android前端面试全流程
    • git操作指南
    • Promise面试题
    • 如何混合使用commonjs和esm
    • 模拟面试项目拷打1
    • 项目综合模拟面试
    • 如何注册和使用域名
    • git commit提交规范
    • Mysql的并发控制实验

常见的性能优化手段

v-if和v-show

v-if和v-show的区别:v-if是针对dom进行的操作,当改变元素的隐藏和显示的时候,需要重新渲染dom结点,造成组件的销毁和重建。而v-show操作的是css属性,类似于display,只会控制某个dom结点是否显示在页面上,但无论显示还是隐藏,dom都会被渲染。

因此如果有频繁的切换的场景时,我们一般用v-show,以便提高速度;当切换得比较少的时候,我们一般用v-if,这样可以减少不必要的渲染开销

watch和computed

computed和watch的区别:他们两个都是用于响应式的数据处理,区别是
1.computed有缓存,如果再次访问返回值的时候,是不会重新触发计算属性的执行的;watch没有缓存,不涉及返回值的缓存
2.watch常常用于一些开销较大的操作,如果监听的数据有频繁的变化,会造成性能问题。 事实上computed能做的,watch也都能做,只是computed更加专精一些

v-for遍历必须要为item添加key值

key是vue.js识别dom结点的唯一标识,用于追踪结点的变化。如果没有设置key,当结点发生变化的时候,就会触发v-for里面的大量不必要的重复渲染,造成性能问题

v-if和v-for不要连用

因为v-for的优先级大于v-if,就会导致每一项都要进行条件判断,带来额外的性能开销。
这里建议使用computed代替v-if进行条件判断,比如下面的例子。里面的filter就是放的if的条件判断

<template>
  <ul>
    <li v-for="user in activeUsers" :key="user.id">
      {{ user.name }}
    </li>
  </ul>
</template>

<script>
export default {
  computed: {
    activeUsers() {
      return this.users.filter(user => user.isActive);
    }
  },
  data() {
    return {
      users: [
        { id: 1, name: "喵喵侠", isActive: true },
        { id: 2, name: "三掌柜", isActive: false },
        { id: 3, name: "杨不易呀", isActive: true }
      ]
    };
  }
};
</script>

使用Object.freeze()

当有一部分数据对象不需要响应式检测他们的变化时,我们可以像这样

const largeData = {
  /* 大型数据对象 */
};

this.largeData = Object.freeze(largeData);
Last Updated:
Contributors: namewyf
Next
如何修改gitignore并删除远程的ignore文件