中高级前端需要掌握哪些Vue底层原理

news/2024/5/3 3:16:52/文章来源:https://blog.csdn.net/weixin_42554191/article/details/137610544

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1. Vue核心概念🔧
      • 2. 组件生命周期🌟
      • 3. 响应式原理🌐
      • 4. 虚拟DOM与diff算法🚀
      • 5. 性能优化🚀
    • 总结:
    • 参考资料:

摘要:

本文将探讨中高级前端开发者需要掌握的Vue底层原理,以及这些原理在实际开发中的应用。

引言:

随着前端技术的发展,Vue作为一款流行的前端框架,其底层原理对于中高级前端开发者来说至关重要。了解Vue底层原理有助于开发者更好地优化代码、提高开发效率和项目的可维护性。

正文:

1. Vue核心概念🔧

中高级前端开发者需要掌握Vue的核心概念,包括Vue组件、Vue实例、生命周期等。这些概念是理解Vue框架的基础,对于实际开发具有重要意义。

Vue2和Vue3都是Vue.js的版本,它们在核心概念上有很多相似之处,但也有一些变化。下面是Vue2和Vue3的核心概念:

1. Vue组件:

Vue组件是Vue.js的核心概念,它提供了一种抽象,允许开发者将UI界面划分为可重用的、可维护的、可组合的组件。Vue组件可以嵌套使用,从而构建出复杂的UI界面。

  • Vue2中的组件:Vue2中的组件分为两种,分别是单文件组件(.vue文件)和普通组件(Vue实例)。单文件组件是由Vue CLI工具生成的,它将组件的模板、样式和逻辑封装在一个单独的文件中,便于管理和维护。普通组件是由Vue实例创建的,它包含一个模板和一些数据。

  • Vue3中的组件:Vue3中的组件也分为两种,分别是单文件组件(.vue文件)和普通组件(setup函数)。单文件组件的编写方式与Vue2相同,但它的逻辑部分被抽离到了一个单独的JavaScript文件中,通过export default导出。普通组件的创建方式与Vue2相同,但它使用setup函数来定义组件的属性和方法,而不是Vue实例。

2. Vue实例:

Vue实例是Vue.js应用程序的入口,它负责创建和管理Vue组件,并将组件挂载到DOM上。Vue实例包含一个数据对象、一个模板编译器和一个事件处理器。

  • Vue2中的Vue实例:Vue2中的Vue实例通过new Vue()创建,它包含一个数据对象和一个模板编译器。数据对象用于存储组件的数据和方法,模板编译器用于将模板转换为DOM。

  • Vue3中的Vue实例:Vue3中的Vue实例通过createApp()创建,它包含一个数据对象和一个事件处理器。数据对象用于存储组件的响应式数据和方法,事件处理器用于处理组件的事件。

3. 生命周期:

生命周期是Vue.js中组件的状态变化过程,它包含了组件的创建、挂载、更新、销毁等阶段。生命周期钩子函数可以在不同阶段执行,用于处理组件的状态变化。

  • Vue2中的生命周期:Vue2中的生命周期包括beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。

  • Vue3中的生命周期:Vue3中的生命周期包括beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeUnmount和unmounted。

总之,Vue2和Vue3在核心概念上有很多相似之处,包括Vue组件、Vue实例和生命周期。但是,Vue3对Vue2进行了重构,使得Vue3在性能、代码可读性和可维护性等方面都有了显著的提升。

2. 组件生命周期🌟

组件生命周期是指组件从创建到销毁的过程。了解组件生命周期可以帮助开发者更好地控制组件的状态,以及在特定阶段执行特定的操作。

Vue2和Vue3的生命周期有所不同,下面将详细介绍两者生命周期及其对比。

1. Vue2生命周期:

Vue2的生命周期可以分为8个阶段,分别是:

  • beforeCreate:在实例被创建之后,数据观测和事件配置之前被调用。
  • created:在实例被创建之后,数据观测和事件配置之后被调用。
  • beforeMount:在挂载开始之前被调用。
  • mounted:在挂载完成后被调用。
  • beforeUpdate:在数据更新之前被调用,但是这里不能访问到更新后的数据。
  • updated:在数据更新之后被调用,可以访问到更新后的数据。
  • beforeDestroy:在组件销毁之前调用。
  • destroyed:在组件销毁之后调用。

2. Vue3生命周期:

Vue3的生命周期可以分为7个阶段,分别是:

  • beforeCreate:在实例被创建之后,数据观测和事件配置之前被调用。
  • created:在实例被创建之后,数据观测和事件配置之后被调用。
  • beforeMount:在挂载开始之前被调用。
  • mounted:在挂载完成后被调用。
  • beforeUpdate:在数据更新之前被调用,但是这里不能访问到更新后的数据。
  • updated:在数据更新之后被调用,可以访问到更新后的数据。
  • beforeUnmount:在组件卸载之前调用。
  • unmounted:在组件卸载之后调用。

对比Vue2和Vue3的生命周期,可以发现以下几点不同:

  • Vue3的生命周期比Vue2少了一个阶段,即beforeDestroy和destroyed。在Vue3中,beforeDestroy和destroyed合并为了beforeUnmount和unmounted。
  • Vue3中的mounted阶段变为了async,表示在挂载完成后可能会异步执行一些操作。
  • Vue3中的updated阶段变为了sync,表示在数据更新后可能会同步执行一些操作。

总之,Vue3的生命周期与Vue2相比,有一些相似之处,也有一些不同之处。了解Vue2和Vue3的生命周期及其对比,可以帮助开发者更好地控制组件的状态,以及在特定阶段执行特定的操作。

3. 响应式原理🌐

Vue的响应式原理是Vue框架的核心之一。开发者需要掌握如何使用Vue提供的响应式API(如ref、reactive)来创建响应式数据,以及如何在实际项目中使用这些API。

Vue2和Vue3都使用了响应式原理,使得数据和视图能够自动保持同步。它们的响应式原理主要基于Object.defineProperty()方法。

1. Vue2响应式原理:

Vue2通过Object.defineProperty()方法将数据对象中的属性转换为getter和setter,从而实现响应式。当数据发生变化时,setter会自动触发视图更新。

具体实现如下:

function defineReactive(obj) {const proxy = {}for (const key in obj) {if (obj.hasOwnProperty(key)) {const value = obj[key]proxy[key] = {get() {return value},set(newValue) {obj[key] = newValue}}}}return proxy
}

2. Vue3响应式原理:

Vue3使用了Proxy对象来实现响应式。Proxy对象可以拦截对数据对象的读取和设置操作,从而实现响应式。

具体实现如下:

function reactive(obj) {return new Proxy(obj, {get(target, key) {return target[key]},set(target, key, value) {target[key] = value}})
}

总结:Vue2和Vue3的响应式原理都是基于Object.defineProperty()方法实现的,但是Vue3使用了更现代的Proxy对象,使得响应式更加简洁和强大。

4. 虚拟DOM与diff算法🚀

虚拟DOM和diff算法是Vue实现高效更新的关键。开发者需要了解虚拟DOM的概念,以及Vue如何使用diff算法来比较虚拟DOM之间的差异,并更新真实DOM。

Vue2和Vue3都使用了虚拟DOM和diff算法来优化页面渲染性能。虚拟DOM将实际DOM转换为虚拟DOM,然后通过diff算法比较新旧虚拟DOM之间的差异,最后将差异应用到实际DOM上。

1. 虚拟DOM:

虚拟DOM是将实际DOM转换为JavaScript对象,这样就可以使用JavaScript的特性来操作虚拟DOM,例如添加、删除、修改属性等。Vue2和Vue3都使用了虚拟DOM来优化页面渲染性能。

2. diff算法:

diff算法用于比较新旧虚拟DOM之间的差异。Vue2使用了递归diff算法,而Vue3使用了双端diff算法。

  • 递归diff算法:递归diff算法会遍历新旧虚拟DOM的节点,比较它们的属性、子节点等,然后生成一个差异对象,最后将差异对象应用到实际DOM上。这种算法的优点是简单,但是效率较低。

  • 双端diff算法:双端diff算法从新旧虚拟DOM的头部和尾部开始比较,找到相同的节点,然后比较它们的子节点。这种算法的优点是效率较高,但是实现较为复杂。

总结:Vue2和Vue3都使用了虚拟DOM和diff算法来优化页面渲染性能。Vue3使用了更现代的双端diff算法,使得页面渲染性能更加高效。

5. 性能优化🚀

性能优化是前端开发中的重要环节。了解Vue的性能优化策略,如懒加载、虚拟DOM优化等,可以帮助开发者编写出更高效的Vue应用。

Vue2和Vue3在性能优化方面有很多相似之处,但也有一些不同。下面将详细介绍两者在性能优化方面的异同。

1. 虚拟DOM和diff算法:

Vue2和Vue3都使用了虚拟DOM和diff算法来优化页面渲染性能。虚拟DOM将实际DOM转换为虚拟DOM,然后通过diff算法比较新旧虚拟DOM之间的差异,最后将差异应用到实际DOM上。这种方法可以减少直接操作DOM的次数,提高渲染性能。

2. 响应式原理:

Vue2和Vue3都使用了响应式原理来优化数据和视图的同步。响应式原理通过Object.defineProperty()方法将数据对象中的属性转换为getter和setter,从而实现响应式。当数据发生变化时,setter会自动触发视图更新。这种方法可以减少视图更新的次数,提高性能。

3. 优化组件库:

Vue2和Vue3都提供了丰富的组件库,可以帮助开发者快速构建复杂的应用程序。这些组件库通常会进行性能优化,例如使用虚拟DOM和diff算法、优化响应式原理等。

4. 优化代码:

Vue2和Vue3都支持使用优化代码,例如使用优化过的函数、减少不必要的计算等。这些优化可以提高代码的执行效率,从而提高性能。

5. 优化浏览器兼容性:

Vue2和Vue3都支持浏览器兼容性优化,例如使用不同的渲染方式来兼容不同的浏览器。这种优化可以提高应用程序在旧版浏览器中的兼容性,从而提高性能。

总之,Vue2和Vue3在性能优化方面有很多相似之处,包括虚拟DOM和diff算法、响应式原理、优化组件库、优化代码和优化浏览器兼容性等。但是,Vue3对Vue2进行了重构,使得Vue3在性能、代码可读性和可维护性等方面都有了显著的提升。

总结:

中高级前端开发者需要掌握Vue底层原理,包括核心概念、组件生命周期、响应式原理、虚拟DOM与diff算法以及性能优化等。掌握这些原理有助于开发者更好地理解Vue框架,提高开发效率和项目的可维护性。

参考资料:

  • Vue官方文档:https://vuejs.org/
  • Vue核心源码分析:https://github.com/vuejs/vue-next

本文详细介绍了中高级前端开发者需要掌握的Vue底层原理。希望对您有所帮助。如有疑问或建议,请随时与我交流。📧🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1045844.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构设计参考项目系列主题:新零售SaaS架构:客户管理系统架构设计

什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周期、降低销售成本、增加销售收入的目的,从而提高企业的盈利能力和竞争力。 …

Qt之信号和槽的机制

前言 在 C 中,对象与对象之间产生联系要通过调用成员函数的方式。但是在 Qt中,Qt提供了一种新的对象间的通信方式,即信号和槽机制。在GUI编程中,通常希望一个窗口部件的一个状态的变化会被另一个窗口部件知道,为…

怎样关闭浏览器文件下载安全病毒中检测功能

怎样关闭浏览器文件下载安全病毒中检测功能 有时候需要通过浏览下载一些特殊文件,浏览器会提示有病毒,终止下载并且自动删除文件。 以为是浏览器的问题,用 chrome、Edge、firefox 三种浏览器下载均失败。 尝试关闭了所有浏览器安全防护也不行…

防止邮箱发信泄露服务器IP教程

使用QQ邮箱,网易邮箱,189邮箱,新浪邮箱,139邮箱可能会泄露自己的服务器IP。 泄露原理:服务器通过请求登录SMTP邮箱服务器接口,对指定的收件人发送信息。 建议大家使用商业版的邮箱,比如阿里云邮箱发信等 防止邮件发信漏源主要关注的是确保邮件…

MySQL innoDB存储引擎多事务场景下的事务执行情况

一、背景 在日常开发中,对不同事务之间的隔离情况等理解如果不够清晰,很容易导致代码的效果和预期不符。因而在这对一些存在疑问的场景进行模拟。 下面的例子全部基于innoDB存储引擎。 二、场景: 2.1、两个事务修改同一行记录 正常来说&…

Linux JDK修改不生效

原JDK8,现需要切换为JDK11,环境变量已经修改为11,但java -version还是显示8。 ln -s -f /home/jdk-11.0.19/bin/java

稀碎从零算法笔记Day45-LeetCode:电话号码的字母组合

题型:映射、回溯算法、递归 链接:17. 电话号码的字母组合 - 力扣(LeetCode) 来源:LeetCode 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出…

AI大模型引领未来智慧科研暨ChatGPT自然科学高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

基于Springboot中小企业设备管理系统设计与实现(论文+源码)_kaic

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

TensorFlow学习之:深度学习基础

神经网络基础 神经网络是深度学习的核心,它们受人脑的结构和功能启发,能够通过学习大量数据来识别模式和解决复杂问题。神经网络的基本工作原理包括前向传播和反向传播两个阶段。 前向传播(Forward Propagation) 前向传播是神经…

AI大模型之ChatGPT科普(深度好文)

目录 训练ChatGPT分几步? 如何炼成ChatGPT? 如何微调ChatGPT? 如何强化ChatGPT? 如何调教ChatGPT? AI思维链是什么? GPT背后的黑科技Transformer是什么? Transformer在计算机视觉上CV最佳作品? ChatGPT是人…

修复 Windows 上的 PyTorch 1.1 github 模型加载权限错误

问题: 在 Windows 计算机上执行示例 github 模型加载时,生成了 master.zip 文件的权限错误(请参阅下面的错误堆栈跟踪)。 错误堆栈跟踪: 在[4]中:en2de = torch.hub.load(pytorch/fairseq, transformer.wmt16.en-de, tokenizer=moses, bpe=subword_nmt) 下载:“https://…

【R基础】一组数据计算均值、方差与标准差方法及意义

【R基础】一组数据计算均值、方差与标准差方法及意义 均值、方差与标准差是用来描述数据分布情况 均值:用来衡量一组数据整体情况。 数据离散程度度量标准: 方差(均方,s^2,总体参数,离均差平方和&#…

实用工具推荐:如何使用MechanicalSoup进行网页交互

在当今数字化时代,网页交互已经成为日常生活和工作中不可或缺的一部分。无论是自动填写表单、抓取网页数据还是进行网站测试,都需要一种高效而可靠的工具来实现网页交互。而在众多的选择中,MechanicalSoup作为一种简单、易用且功能强大的Pyth…

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置(Windows)下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具: 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题,笔者因此认为代码版本管理工具对于提高团队…

基于FPGA的以太网相关文章导航

首先需要了解以太网的一些接口协议标准,常见的MII、GMII、RGMII时序,便于后续开发。 【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序! 介绍一款比较老的以太网PHY芯片88E1518,具有RGMII接口&#xf…

防止狗上沙发,写一个浏览器实时识别目标检测功能

家里有一条狗🐶,很喜欢乘人不备睡沙发🛋️,恰好最近刚搬家 狗迎来了掉毛期 不想让沙发上很多毛。所以希望能识别到狗,然后播放“gun 下去”的音频📣。 需求分析 需要一个摄像头📷 利用 chrome…

openHarmony 如何从API9升级到API10

最近用从官方下载的DevEco Studio3.1开发小app, 需要用到第三方库,加载第三方库,并添加代码,编译时如下错误: hvigor Finished :entry:defaultGenerateMetadata… after 3 ms hvigor ERROR: Failed :entry:defaultMergeProfile… …

微信小程序页面交互综合练习 (重点:解决“setData of undefined”报错问题)

一、写一个注册表单,点击“注册”按钮将用户输入的数据带到服务器,并且能在控制台显示参数。 (1)首先,我需要在vscode里面创建一个简易的node.js服务器 //第一步:引入http模块 var http require(http); //第二步:创建…

算法刷题Day30 | 332.重新安排行程、51. N皇后、37. 解数独

目录 0 引言1 重新安排行程1.1 我的解题1.2 更好的解法 2 N皇后2.1 我的解题 3 解数独3.1 我的解题3.2 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day30 | 332.重新安排行程、51. N皇后、37. …