Vue生命周期与性能优化

2023-10-27

生命周期

  • beforeCreate 在 Vue 实例初始化之后,数据观测(data observer)之前被调用;
  • created 实例已创建完成之后被调用。在这一步,实例已完成这几个配置:数据观测、属性和方法的运算、watch/event 事件回调。这里还没有 $el
  • beforeMount 在挂在开始之前被调用,相关的 render 函数首次被调用;
  • mounted el 被创建的 vm.$el 替换,并挂载到实例上去之后调用这个钩子;
  • brforeUpdate 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前;
  • updated 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子;
  • beforeDestory 实例销毁之前调用。在这一步,实例仍然完全可用;
  • destroyed Vue 实例销毁后调用,调用后,Vue 实例指示的所有东西都会接绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
    Vue生命周期流程图

各个生命周期内可以做的事情

  • created 实例已经创建完成,因为它是最早触发的原因,可以进行一些数据、资源的请求;

  • mounted 实例已经挂载完成,可以进行一些 DOM 操作,也可以进行一些数据、资源的请求;

  • beforeUpdate 可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程;

  • updated 可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间,不被调用;

  • beforeDestroy 可以执行一些优化操作,比如清空定时器,解除绑定事件。

  • beforeCreate 和 beforeMount,父组件会先触发;

  • 创建 Vue 实例时(created),父组件会先创建。只有父组件先初始化,内部的子组件才会初始化;

  • 挂载时(mounted),子组件先挂载。子组件渲染完了,父组件才会接着渲染完;

  • 卸载时(beforeDestory),子组件先卸载。如果先卸载父组件,子组件如何处理?这可能会造成内层泄露;

  • beforeUpdate 父组件先触发更新;

  • updated 子组件先触发。子组件更新完了之后,父组件才算更新完成;
    父子组件生命周期调用顺序
    更新调用顺序

常见的性能优化

  • 合理使用 v-show 和 v-if,更新不是很频繁时可以使用 v-if,v-if 比较耗费性能,如果是频繁切换的场景就使用 v-show
  • 合理使用 computed,计算属性会基于它们的响应式依赖进行缓存,只在相关响应式依赖发生改变时它们才会重新求值;
  • v-for 时加上 key,以及避免和 v-if 同时使用,因为 v-for 比 v-if 优先级更高,每次 v-for 时,v-if 都要重新计算一遍,这很浪费;
  • 自定义事件、DOM 事件、定时器等任务及时销毁(在 beforeDestory 中),避免内层泄露;
  • 合理的使用异步组件,只在需要的时候才从服务器加载模块,而且 Vue 异步组件被渲染时会把结果缓存起来供未来重渲染;
  • 合理的使用 keep-alive。对于不需要重新渲染的组件进行缓存,如多个静态 Tab 页的切换,可以用 keep-alive 包裹;
  • data 层级不要太深,避免递归次数过多,消耗时间;
  • 前端通用的性能优化,比如图片懒加载;
  • 使用 SSR。

v-if 与 v-show

这两个指令都可以把元素隐藏或显示。当传入的数据是 true 是展示,false 会隐藏。不同的是:v-if 会把元素或者组件删掉(不渲染),即在 DOM 中移除;v-show 则会使用 CSS 当中的 display 属性,将其设置成 none。可见,v-if 要比 v-show 性能低,尤其是在频繁切换的场景下。

key 的重要性

在循环中应使用 key,且最好不要是 index 或者 random。diff 算法中通过 tag 和 key 来判断是否是同一个节点(sameNode),使用 key 可以减少渲染次数,提高渲染性能。

Vuex

Vuex 是一个 Vue 状态管理库。与 Redux 相比,Vuex 理解起来要简单许多。它的大致工作流程如下:
Vuex工作流程
图中绿色虚线部分就是 Vuex 的工作环境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue生命周期与性能优化 的相关文章

随机推荐

  • bash: scp: 未找到命令 lost connection

    通过ssh免密通道上传备份时报错 bash scp 未找到命令 lost connection 解决 分别查看发送端服务器 接收端服务器 1 查找命令是否存在 whereis scp 不存在就重新安装 yum install openssh
  • PyQt5实现父窗口内点击按钮显示子窗口(窗口嵌套功能)

    摘要 在软件中 常会有点击某个按钮 显示一个新的子界面的需求 本文介绍如何在PyQt5中实现这一功能 主要涉及知识点是 信号与槽函数的自动绑定 程序说明 1 开发环境 win10系统 pycharm2021 python3 7 2 实现功能
  • RGBLCD显示实验————复习到这

    目录 LCD 和eLCDIF 简介 LCD 简介 eLCDIF 接口 硬件原理分析 实验程序编写 编译下载验证 编写Makefile 和链接脚本 编译下载 LCD 液晶屏是常用到的外设 通过LCD 可以显示绚丽的图形 界面等 提高人机交互的
  • 图书管理系统 ——mysql数据库

    java图形化 图书管理系统 使用mysql数据库 此博客是本人一次Java实验课作业 1 管理员操作 能够实现图书的增 删 改 查操作 2 普通注册用户操作 1 借阅图书 借阅成功后 对应图书在馆数量相应减1 2 归还图书 归还成功后 对
  • Flutter 自定义steps(横向步骤条,纵向步骤条)

    近期做flutter开发 实现一个自定义进度条功能 直接上代码 import package flutter material dart import package flutter screenutil flutter screenuti
  • C++之大数相乘

    1 问题描述 两个大数相乘 输入是两个字符串 如 99 99 实现两个数的相乘 返回结果也是一个字符串 结果是 9801 因为是C 所以使用string 输入描述 输入两个字符串 输出描述 输出为一行 2 代码 分析在代码中 include
  • qt学习笔记4:QMainWindow 菜单栏、工具栏、状态栏、铆接部件、

    在创建基类的时候 有三大选择 一个是QWidge 空窗口 另一个就是QMainWindow QMainWindow是一个为用户提供主窗口的类 包含一个菜单栏 多个工具栏 多个链接部件 一个状态栏以及一个中心部件 是许多应用程序的基础 如文本
  • 深度学习实战之车牌识别项目

    车牌识别项目 不经常上线 既然有人想要代码 现在我将它发出来 不过需要你们下载 具体下载方法 我想你们都懂得 https download csdn net download weixin 43648821 11423543 本博客关于深度
  • 为什么MySql喜欢B+树

    目录 怎样的索引的数据结构是好的 什么是二分查找 什么是二分查找树 什么是自平衡二叉树 什么是 B 树 什么是 B 树 1 单点查询 2 插入和删除效率 3 范围查询 MySQL 中的 B 树 总结 参考文献 为什么 MySQL 采用 B
  • filter、map函数的区别

    1 def even num 2 if num 2 0 3 return True 4 return False 5 lis 1 2 3 4 5 6 7 8 9 6 res filter even lis 7 print filter li
  • 华为申请注册盘古大模型商标;京东推出言犀大模型,率先布局产业应用

    7月14日科技新闻早知道 一分钟速览 1 华为申请注册盘古大模型商标 据天眼查 App 显示 7 月 7 日 华为技术有限公司申请注册 华为云盘古 Huawei Cloud Pangu Models 文字及图形商标 国际分类为网站服务 社会
  • 未知的生成错误“因为没有预加载,所以无法解析程序集“System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f1

    搜索System Drawing dll 添加到工程中
  • EVE上传Dynamips、IOL和QEMU镜像

    1 镜像保存目录 opt unetlab addons dynamips Dynamips镜像保存目录 iol IOL镜像保存目录 运行IOU的镜像 qemu QEMU镜像 运行ASAv ISE F5等等镜像 2 上传dynamips镜像
  • 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)

    k近邻算法 kNN 本博客来源于CSDN http blog csdn net niuwei22007 article details 49703719 本博客源代码下载地址 CSDN免费下载 GitHub下载地址 均带有详细注释和测试数据
  • C语言 指针

    1 变量的地址 变量对应内存中的一段存储空间 该段存储空间占用一定的字节数 可能是 1个字节 也可能是 4 或是 8 个字节 用这段存储空间的第一个字节的地址表示变量的地址 即低位字节的地址 变量的地址 可以通过 Reference 引用运
  • Linux内核-中断知识汇总(重温)

    1 概述 中断控制是计算机发展中一种重要的技术 最初它是为克服对I O接口控制采用程序查询所带来的处理器低效率而产生的 中断控制的主要优点是只有在I O需要服务时才能得到处理器的响应 而不需要处理器不断地进行查询 由此 最初的中断全部是对外
  • 整理了几个100%会踩的Python细节坑,提前防止脑血栓

    B站 公众号 啥都会一点的研究生 哈喽我是啥都生 本期整理了几个极易忽视的Python细节 提前了解 帮你大幅缩短debug时间 case 1 给你三秒钟 告诉我这段程序的结果 case1 9 8 7 3 2 2 case1 case1 a
  • Base64的Woff2字体信息如何转成成文件

    这里是借助在线的Base64和字体文件转换网站来完成的 首先用到的是https base64 guru converter 将Base64的字符串的 base64 后的部分拷贝到右侧Base64文本区 然后点击Decode Base64 t
  • JetBrains IDE2022全新UI偷跑版本-windows11

    文章目录 前言 1 双击shift 输入registry 切换到Actions选项卡 点击进入注册表 2 勾选ide expermental 相关选项 点击close重启idea 3 重启后进入setting gt Edirot gt Co
  • Vue生命周期与性能优化

    生命周期 beforeCreate 在 Vue 实例初始化之后 数据观测 data observer 之前被调用 created 实例已创建完成之后被调用 在这一步 实例已完成这几个配置 数据观测 属性和方法的运算 watch event