美文网首页前端技术
React 设计原理 2 前端框架的实现原理

React 设计原理 2 前端框架的实现原理

作者: 吴摩西 | 来源:发表于2023-06-04 21:09 被阅读0次

Svelte

react 原理-svelte.png

借由模板语法的约束,经过 AOT 的编译优化,Svelte 可以直接建立 “自变量与元素的对应关系”。Svelte 在运行时忽略了“根据自变量变化计算出 UI 变化”这一步骤,使其在执行“细粒度的更新”(比如更新大列表的某一行)时比“使用 VDOM 的框架” 的整体更新路径更短。

Vue3

Vue3 是一款组件级别的前端框架,这意味着它会建立“自变量与组件的对应关系”,并在此基础上通过 VDOM 寻找 “自变量变化到UI变化的关系”。同时,由于 Vue3 使用模板语法描述 UI,因此它可以从 AOT 中受益。 Vue3 原理如下:


react 原理 - Vue3.png

Vue3 的代码如下

<script setup>
import { ref } from 'vue'
let count = ref(0);
</script>
<template>
  <h1 @click="count ++">{{ count }}</h1>
</template>

Vue3 会对每个组件生成 watchEffect,在初始化和依赖的变量变化时,会执行
(1). 调用组件的 render 函数,生产 VNode,

// 模板代码
<h1 @click="count++">{{ count }}</h1>

//编译后生成的 render 函数
function render(_ctx, _cache, $props, $setup, $data, $options) {
  return (_openBlock(), _createElementBlock("h1", (
    onClick: _cache(0) || (_cache(0) = $event => (_ctx.count++))
  ), _toDisplayString(_ctx.count), 1 /* TEXT */));
}

effect 会订阅“其回调函数上下文中执行的所有自变量”,当自变量发生变化后,effect 会重新执行。所以当上述 render 函数执行后,内部的自变量变化 (_ctx.count 的变化) 会被该 effect 订阅。
(2) 在步骤 (1) 执行后,render 函数的返回值为本次更新的 VNode,它会与上一次更新的 VNode 同时传入 patch 方法,执行 VDOM 的相关操作,找到 “本次自变量变化导致的元素变化”,并最终执行对应的 DOM 操作。

React

作为应用级框架,React 的实现原理很简单,

react 过程.png
  1. 触发事件,改变自变量,开启更新流程;
  2. 执行 VDOM 相关操作,在 React 中被称为 reconcile;
  3. 根据步骤 2 计算出所需要变化的 UI, 执行对应的 UI 操作,在 React 中被称为 commit。

React 被称为应用级框架的原因在于,其每一次更新流程都是从应用的根结点开始的。对比与其他框架:

  • Vue3 的更新流程开始于组件。
  • Svelte 的更新流程开始于元素。

由于每次都是全更新,React 不关心是哪个自变量发生变化,也不需要 “细粒度更新” 和 AOT。一方面 React 内部有其优化机制,另一方面,React 暴露了一些 API 来减少无意义的遍历过程,比如 shouldComponentUpdateReact.memoPureComponent

Vue3 由于细粒度更新和 AOT 优化,已经减少了大部分无意义的遍历过程。可以说: 由于 React 没有完成这部分性能优化的任务,因此这部分工作交到了开发者手中

相对的,基于“重运行时”架构,React 拓展了许多令人耳目一新的能力,比如:

  • 优先级调度
  • Time Slice (时间切片)
  • Hooks
  • Suspense

相关文章

  • 前端路由原理和React Router

    前端路由原理 前端三大框架 Angular、React、Vue ,它们的路由解决方案 angular/router...

  • Angular(06)- 为什么数据变化,绑定的视图就会自动更新

    这里提一点,前端三大框架(Angular,React,Vue)的数据驱动来更新视图的原理,即 MVVM 的实现。为...

  • 浅谈前端路由

    实现原理 现有的主流前端框架(ng,Vue,React)中,都实现了对应的路由组件。 在较新的浏览器中,可以通过h...

  • 重点掌握

    【前端性能优化汇总】【Webpack原理+React原理+Redux+React Router】【输入URL后发生...

  • React Router-简单原理

    以下内容主要参考自 深入理解 react-router 路由系统react-router的实现原理前端路由实现与 ...

  • 学习笔记:深入RN知识总结

    一、RN底层实现原理 1.1、 React内部核心:虚拟DOM技术+diff算法。 React框架,将JSX代码渲...

  • React Hooks究竟是什么呢?

    摘要: React Hooks原理解析。 原文:快速了解 React Hooks 原理 译者:前端小智 我们大部分...

  • RTOS基础(邮箱)

    邮箱的原理与创建 问题概述 设计原理 设计实现 邮箱的获取和释放 设计原理 设计实现 邮箱的清空与删除 设计原理 ...

  • 前端架构师必备技能

    1.前端工程化 2.性能优化(用户体验,兼容,适配) 3.框架底层原理Vue,React 4.服务端基础Http,...

  • Redux中Provider小结

    实现原理: Provider实现原理是使用React的隐藏属性Contexts实现。 作用: Provider是容...

网友评论

    本文标题:React 设计原理 2 前端框架的实现原理

    本文链接:https://www.haomeiwen.com/subject/cdlxedtx.html