首页 > 其他分享 >vue的运行过程和各阶段分析

vue的运行过程和各阶段分析

时间:2024-07-23 08:58:26浏览次数:14  
标签:虚拟 vue 实例 渲染 DOM Vue 阶段 模板 运行

Vue.js 的运行过程可以分为以下几个主要步骤:

1. 初始化阶段

a. 解析模板(Template Parsing)
  • Vue.js 使用HTML-based模板语法,当创建一个Vue实例时,它会将提供的模板字符串编译成渲染函数(render function)。这个过程包括了将模板中的指令(如 v-ifv-for)和插值表达式(如 {{ message }})转换成JavaScript可执行的代码。
b. 数据响应式(Reactive Data)
  • Vue.js 使用Object.defineProperty()(Vue 2.x)或Proxy(Vue 3.x)来实现数据的响应式。它会遍历Vue实例的data对象中的所有属性,并将它们转换为getter/setter,从而使得当数据变化时,视图能够自动更新。
c. 依赖收集(Dependency Collection)
  • 在数据响应式的基础上,Vue会记录每个组件的渲染过程中所依赖的数据属性。这样,当这些属性发生变化时,Vue可以知道哪些组件需要重新渲染。

2. 编译阶段

a. 编译模板(Template Compilation)
  • Vue将模板编译成渲染函数。渲染函数是一个返回虚拟DOM树的函数。
b. 生成虚拟DOM(Virtual DOM)
  • 渲染函数会生成虚拟DOM树,这是一个轻量级的JavaScript对象,描述了应该出现在视图中的内容。

3. 挂载阶段

a. 挂载到DOM(Mounting to Real DOM)
  • Vue将虚拟DOM转换成真实的DOM节点,并将其挂载到页面的指定元素上。

4. 更新阶段

a. 数据变化(Data Change)
  • 当数据发生变化时,响应式系统会通知依赖收集阶段所建立的依赖关系。
b. 重新渲染(Re-render)
  • Vue会重新执行渲染函数,生成一个新的虚拟DOM树。
c. Diff算法(Diffing)
  • Vue使用diff算法比较新旧虚拟DOM树,计算出需要对真实DOM进行的最小更新。
d. 更新视图(Update Real DOM)
  • 根据diff的结果,Vue会高效地更新页面上实际的内容。

5. 销毁阶段

a. 销毁实例(Instance Destruction)
  • 当Vue实例不再需要时,可以调用vm.$destroy()来销毁实例。这个过程中,所有的事件监听器会被移除,所有的子实例也会被销毁。
    整个Vue的运行过程是高度优化的,它确保了只有必要的DOM操作会被执行,从而提供了流畅的用户体验。此外,Vue还提供了许多高级功能,如组件系统、路由器、状态管理等,这些都是在上述基础运行过程之上的抽象和扩展。

标签:虚拟,vue,实例,渲染,DOM,Vue,阶段,模板,运行
From: https://blog.csdn.net/qq_36083245/article/details/140624804

相关文章

  • 初始化 pytorch RPC 时 getBar1SizeOfGpu 出现运行时错误
    我在系统上使用PyTorch和RPC后端时遇到运行时错误。错误信息如下:谁能告诉我为什么会出现这个问题以及如何解决它?谢谢。Traceback(mostrecentcalllast):File"/work/personal_workspace/torchrpc_test.py",line20,in<module>rpc.init_rpc(name=f"worker_{......
  • 通过命令行运行时,收到错误“no attribute Predict_proba”
    我有一组代码,当我在python解释器(3.8.4)中运行时,一切正常。然而,当我尝试通过命令行运行时,我最终收到一个错误:AttributeError:This'SelfTrainingClassifier'hasnoattribute'predict_proba'这很奇怪,因为当我浏览文档时,selfTrianingClassifier确实有predcit_proba......
  • TypeError:预期的字符串或类似字节的对象,在使用导入运行 Pyinstaller 时得到“NoneType
    我正在尝试从Python创建可执行文件,但收到以下错误。我创建了一个干净的环境,并尝试仅通过导入和文件中的简单print('HelloWorld')来重现该问题,如下所示:importtkinterastkimportthreadingfromtkinterimportfiledialogfromtkcalendarimportDateEntryfro......
  • 问题:函数在开始时只运行一次
    该程序从流式麦克风获取输入,并通过在listen_print_loop()中对其进行处理来生成输出。点击有效,但向上或向下移动仅有效一次。在添加pydub库之前它工作正常。importqueueimportsysimportpyautoguiaspagfrompydubimportAudioSegmentfrompydub.playbackimport......
  • 无法在 python 中安装 pip install expliot - bluepy 的 Building Wheel (pyproject.t
    在此处输入图像描述当我尝试在Windows计算机中通过cmd安装pipinstallexpliot包时,我收到2个错误名称×Buildingwheelforbluepy(pyproject.toml)didnotrunsuccessfully.│exitcode:1**AND**opt=self.warn_dash_deprecation......
  • 【vue+jdbc实现数据库操作java web前后分离版】
    创建数据库droptableifexistsusers;createtableusers(idbigint(20)notnullauto_incrementcomment'用户id',usernamevarchar(100)default''comment'用户名',phone......
  • vue项目打包以及在nginx中部署
    ——————vue项目打包点击npm脚本下的build中的三角即可没有npm脚本的话点下package.json,还没有的参考博客https://www.cnblogs.com/yansans/p/18303172 稍微等一会,打包完成后数据会放在新生成的dist目录中  打包结束  ——————在nginx中部署在文件夹......
  • java毕业设计-基于springboot+vue的校园二手交易系统,基于java的校园二手交易系统,基于j
    文章目录前言演示视频项目背景项目架构和内容获取(文末获取)具体实现截图前台功能管理后台技术栈具体功能模块设计系统需求分析可行性分析系统测试为什么我?关于我我自己的网站前言博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • ​大模型发展进入产业应用新阶段
    自2022年底ChatGPT上线以来,不到一年时间里,人工智能大模型已经成为一条社会各界普遍认可的新赛道。随着越来越多玩家快速涌入,产业也开始逐渐摆脱炒概念的过热阶段,向实际应用落地的新阶段演进。这条赛道当前面临着激烈的国际竞争,我国还需扬长避短,走出发展新路径。技术突破让......
  • 前端使用 Konva 实现可视化设计器(18)- 素材嵌套 - 加载阶段
    本章主要实现素材的嵌套(加载阶段)这意味着可以拖入画布的对象,不只是图片素材,还可以是嵌套的图片和图形。请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址在原来的drop处理基础上,增加一个json类型素材的处理入......