当前位置: 首页 > 网络应用技术

VUE编译优化和代码生成源代码分析

时间:2023-03-08 00:52:20 网络应用技术

  作者汇编汇编后,编译了汇编部分。

  对于今天准备的细节,解析分析后,VUE的其他两个重要部分产生了震惊。

  让我们首先看一下有关Vue这一部分的评论:

  粗略的含义是,无需重新创建一个新节点并跳过补丁过程。

  再次重申Vue的工作流程。

  作者花了很长的时间写作分析,而今天提出的源代码分析约为2和3。

  优化的优化部分在补丁过程中直接忽略。该模块如下:

  首先,我们必须知道选项。统计学实际上是一个字符串:

  GenStaticscached的源代码是:

  1. genstaticscached是缓存的返回,即cachedfn,所以

  那是

  2.因为起头不存在缓存,它将执行

  fn函数是传递的函数:即执行实际上是:

  在替换选项中。统计,获取:

  因此:最终结果是:

  这个功能是什么?源代码如下:

  实际上很容易发现:

  字符串,它将成为一个对象:

  返回的最后一个功能实际上是:

  的确是确定它是否是静态键。SO称为静态键是上诉的这些属性。此功能将在下面使用。

  此功能非常简单。实际上,是判断它是否是平台标签。Web平台是普通标签和SVG标签。

  该函数实际上是一个辅助函数,也就是说,AST树的每个节点是否是静态节点。特定的判断方法需要通过源代码分析。

  首先从宏观的角度考虑静态标准。

  需要满足以下两个要求:

  两者都是必不可少的,让我们一一分析他们:

  首先查看第一点,iStatic源代码如下:

  第一点中的SO列表要求实际上是此功能的返回部分。

  再次看第二点

  换句话说,当满足所有要求时已经满足以上所有点时,它仍然只是基本条件。

  本质

  Markstaticroots功能主要使用两个符号对满足要求的所有节点:

  而且,此徽标确实在下一个大阶段代码生成中使用。

  非常简单,只要节点的祖先节点所在,并且它具有静态或一旦属性,它就会被标记。

  再次看静态,其条件分为两部分,

  条件一种意味着满足静态并具有儿童节点。

  条件的两个均值。条件一个中只有一个孩子,并且消除了动态节点的情况。例如:

  在这种情况下,DIV不能被视为静态。

  我相信他们的心中会怀疑,为什么?

  我们将在稍后生成的代码中给出答案。

  1.父节点是静态的。孩子必须是静态的。子节点可能不是静态的。父节点必须静止。

  2.真正有效的是静态和静态属性。

  逐渐开出来,生成字符串,短函数-Type字符串以准备执行后来的渲染。本质是对象形式向对象形式的过渡到短函数表单。

  本质上,我们将从一棵震惊的树上

  成为函数的树节点变成函数:

  那么,总共有什么简短功能?

  关于简短功能,它实际上是在rendermixin中定义的,让我们看看。

  我们需要理解执行的短函数是获得另一个树,即vnode树。因此,这些短函数要么创建一些vnode节点,要么为VNode节点创建一些属性。

  因此,我们的短函数格式主要是

  第一个参数是标签名称,第二个是属性,第三个参数是子函数,即子节点。

  让我们看一下主要功能。

  主过程由生成函数启动。

  让我们先看看我们的回报内容

  您可以看到总共两个属性渲染和静态RenderFN。

  首先,首先将其标记为Optimize标记的静态和静态,而不会放置在代码中,而是在静态RenderFN上。特定的游戏玩法将在稍后进行详细说明。

  在功能方面,只有两个过程。我在上述代码上给了两个模块的注释。

  让我们看一下第一个区块的具体情况:

  实际上,上面的注释不准确。状态具有许多功能。CodeGenstate本身就是一类。细节如下:

  应该注意的是,指令实际上仅通过生成短函数来生成。简短的处理是在渲染函数和补丁中完成的。如果您不熟悉VUE源代码的周期,请阅读作者的解析思想。

  查看第二个模块:

  可以看出,AST的底部是一个短函数,否则它将输入核心函数基因。

  基因是CodeGen过程中最重要的函数,它处理大多数短函数。

  查看源代码:

  IFELSE分支分为8个病例,让我们一一分析。

  (1)Genstatic首先看一下判断条件

  突然没有,没有,原始优化部分的静态在这个地方进行了处理。在我们说之前,静态的节点在斑块的过程中,仅用于第一个渲染,而后来的比较被完全忽略了。

  我们需要考虑两个问题

  首先查看如何渲染静态节点,首先观看Genstatic代码:

  state.staticrenderfns以数组的形式保存静态渲染函数。简短的功能是真正执行的。根据传输索引,需要呈现数组。

  请参阅_M短函数的原始函数是渲染的:

  呈现的主要内容是生成vnode并点击静态标记。SO标记为:

  当然,这些参数将在补丁链接中起相应的角色。不要在这里重复。作者的后续源分析模块将具有补丁源分析。

  2)Genonce情况主要分为3种类型:

  因此,Genonce的基础是Genstatic,但是当持有V-IF标签时,您必须转到Genif。这是因为if形式位于V-IF标签的ifconditions数组中。根据特定条件,根据特定条件,渲染目标模块没有渲染的情况

  至于静态,情况更加复杂。

  我们必须知道随后的Vue阵列补充。