当前位置: 首页 > news >正文

vuejs源码阅读之优化器

在这里插入图片描述

前面讲过vuejs中解析器是把html模版解析成AST,而优化器的作用是在AST中找到静态子树并打上标记。

静态子树是指的那些在AST中永远不会发生变化的节点。

例如,一个纯文本节点就是静态子树,而带变量的文本节点就不是静态子树,因为他会随着变量的变化而变化。

标记静态子树有两点好处。

  • 每次重新渲染时,不需要为静态子树创建新节点
  • 在虚拟DOM中打补丁的过程可以跳过

重新渲染,不需要为静态子树创建新节点

前面介绍虚拟DOM时,我们说每次重新渲染都会使用最新的状态生成一份全新的VNode与旧的VNode进行对比。

而在生成VNode的过程中,如果发现一个节点被标记为静态子树,那么除了首次渲染会生成节点之外,在重新渲染时并不会生成新的子节点树,而是克隆已存在的静态子树。

在虚拟DOM中打补丁的过程可以被跳过

之前说过打补丁的过程,需要对比两个节点并更新DOM。如果两个节点都是静态子树,就不需要进行对比与更新DOM的操作,直接跳过。

因为静态子树是不可变的,不需要对比就知道它不可能发生变化。此外,直接跳过后续的各种对比可以节省javascript的运算成本。

实现步骤

第1步:在AST中找出所有的静态节点并打上标记,
第2步:在AST中找出所有静态根节点并打上标记。

http://www.lryc.cn/news/101682.html

相关文章:

  • 【C++】-动态内存管理
  • 微服务SpringCloud教程——微服务是什么
  • RNN架构解析——LSTM模型
  • 苹果电脑系统优化工具:Ventura Cache Cleaner for mac
  • 为了爱人穿越沙漠-心理测试
  • SpringBoot月度员工绩效考核管理系统【附任务书|ppt|万字文档(LW)和搭建文档】
  • 【新星计划】STM32F103C8T6 - C语言 - 蓝牙JDY-31-SPP串口通信实验
  • 算法39:Excel 表列序号
  • Android:ImageView xml方式配置selector 图片切换
  • Spring Boot 缓存 Cache 入门
  • 如何关闭谷歌浏览器自动更新
  • mybatis日志工厂
  • 020 - STM32学习笔记 - Fatfs文件系统(二) - 移植与测试
  • flask用DBUtils实现数据库连接池
  • SQL注入之布尔盲注
  • 微服务入门---SpringCloud(一)
  • Rust vs Go:常用语法对比(九)
  • Typescript 第五章 类和接口(多态,混入,装饰器,模拟final,设计模式)
  • IFNULL()COALESCE()
  • WPF实战学习笔记23-首页添加功能
  • OpenCV-Python常用函数汇总
  • Vue-router多级路由
  • 前端学习--vue2--2--vue指令基础
  • 【Python机器学习】实验03 logstic回归
  • 面试-杨辉三角python递归实现,二进制转换
  • SPEC CPU 2017 x86_64 Ubuntu 22.04 LTS LLVM 16.0.6 编译 intrate intspeed
  • java备忘录模式
  • iOS--runtime
  • 06. 管理Docker容器数据
  • 计算机视觉常用数据集介绍