Vuejs设计与实现 —— 编译层面的优化-璇泰初网络

Vuejs设计与实现 —— 编译层面的优化

简介: Vuejs设计与实现 —— 编译层面的优化

image.png

编译优化

是什么?

编译优化 指的是编译器将 模板(template) 编译为 渲染函数(render) 的过程中,尽可能的 提取关键信息,以达到 生成最优代码 的过程。

为什么需要?

传统的 Diff 算法会存在很多无意义的对比操作

在对比 新旧 两颗 虚拟 DOM 时,总是要按照 虚拟 DOM层级结构 "一层一层" 进行遍历,然后其中某些内容的遍历对比是完全没必要的,例如:

<div id="foo">
    <p class="bar">{{ text }}</p>
</div>
复制代码
State of Vue 2022-尤雨溪

Vue3 中的编译优化的方式

标记动态节点

标记动态节点之后,在后续渲染器更新阶段旧可以直接基于动态节点集合,实现对动态节点的 靶向更新定向更新.

patchFlag 属性

在编译器进行编译时,如果判断当前节点是属于 动态节点,就会为这个 vnode 节点打上 patchFlag 标记,也就是添加一个 patchFlag 属性,并且 patchFlag 属性 对应的 数值 代表了当前这个 动态节点的类型,如:

  • 数字 1:代表该节点是 动态textContent
  • 数字 2:代表该节点是 动态calss 绑定
  • 数字 3:代表该节点是 动态style 绑定
  • ...

dynamicChildren 属性

dynamicChildren 属性 值对应的是一个数组,其中保存的就是带有 patchFlag 属性vnode 节点,并且带有 dynamicChildren 属性vnode 节点成称为 块,即 Block.

Block 节点

一个 Block 本质上也是一个 虚拟 DOM 节点,只不过它比普通的虚拟节点多了一个用于 存储动态子节点dynamicChildren 属性.

一个 Block 不仅能够收集它的 直接动态子节点,也能收集所有 动态的子代节点,而后续渲染器的更新操作将以 Block 作为更新维度去处理.

什么样的节点会变成 Block 节点?

  • 所有模板的 根节点
  • 带有 v-if 指令的节点
  • 带有 v-for 指令的节点
  • 模板中 Frament 节点所包裹的 多根节点

其中 v-ifv-for 指令会导致 更新前后模板结构不稳定,不过由于 v-for 指令渲染的是一组子节点,为了更好的表示这一组子节点,就需要使用 Fragment 节点来表达 v-for 指令的渲染结果,并将其作为 Block 节点.

静态提升

静态提升的目的是尽可能减少更新时创建 虚拟 DOM 带来的 性能开销内存占用.

没有静态提升时带来的问题

通常,在响应式数据发生变化时,渲染函数就会重新执行,并产生新的虚拟 DOM 节点,显然纯静态的虚拟节点完全没有必要重新创建,这会带来一定的性能开销.

解决方案

在编译阶段可以 将纯静态节点提升到渲染函数外部,在渲染函数内部保持对静态节点的引用即可,当响应式数据变化引起渲染函数重新执行时,并不会重新创建静态的虚拟节点,这样旧可以避免重复创建静态节点的虚拟 DOM 带来的性能开销.

值得注意的是,静态提升是以树为单位的,毕竟不可能会为每一个小的静态节点进行静态提升,这会导致渲染函数外部对应存储静态节点的变量增多,这也会 占用一定的内存.

预字符串化

基于 静态提升 可以继续采用 预字符串化 的优化手段,即直接将原本需要以树为单位进行静态提升的内容,直接转换为对应基于 DOM 操作的 字符串形式.

预字符串化的优势如下:

  • 大块的静态内容可以直接通过 innerHTML 进行设置,在 初始化渲染 时具有一定的性能优势
  • 减少创建虚拟节点产生开销的性能
  • 减少内存占用

缓存内联事件处理函数

不缓存内联事件函数带来的问题

在模板事件处理函数中,为了一些简单的更新操作,通常会在模板中编写 内联的事件处理函数,例如:

<Comp @change="c = a + b">  ===>  function render(ctx){
                                     return h(Com, {
                                        // 内联事件处理函数
                                        onChange: () => ctx.c = ctx.a + ctx.b
                                     })
                                  }
复制代码
目录
相关文章
|
6月前
|
缓存 监控 JavaScript
优化策略:提升Vue应用的性能和加载速度
【4月更文挑战第23天】本文探讨了优化Vue应用的策略,包括代码层面(精简代码、组件拆分、计算属性和侦听器)、路由懒加载、数据懒加载与防抖节流、图片和资源压缩及CDN、缓存机制的利用,以及使用Vue Devtools和性能分析工具进行监控与调试。通过这些方法,可以提升Vue应用的性能和加载速度,确保用户获得流畅体验。
199 1
|
6月前
|
缓存 JavaScript 前端开发
vue如何优化首页加载速度
vue如何优化首页加载速度
85 7
|
6月前
|
缓存 JavaScript 前端开发
vue如何优化首页加载速度?
vue如何优化首页加载速度?
84 0
|
1月前
|
缓存 监控 JavaScript
如何优化 Vue 的执行流程?
【10月更文挑战第2天】
102 59
|
25天前
|
缓存 JavaScript UED
优化Vue的响应式性能
【10月更文挑战第13天】优化 Vue 的响应式性能是一个持续的过程,需要不断地探索和实践,以适应不断变化的应用需求和性能挑战。
30 2
|
1月前
|
存储 缓存 JavaScript
Vue 有哪些提高性能的优化技巧
【10月更文挑战第7天】 在 Vue 应用开发中,性能优化至关重要。本文介绍了十大优化技巧,包括数据结构优化、组件化设计、虚拟 DOM 优化、事件处理、数据绑定、图片优化、网络请求、代码优化、服务端渲染及其他技巧,帮助提升应用性能和用户体验。
22 1
|
1月前
|
JavaScript 前端开发
|
20天前
|
缓存 JavaScript 数据管理
优化 Vue 应用中的性能
【10月更文挑战第22天】优化 Vue 应用性能需要综合考虑多个方面,从数据管理、组件化、虚拟 DOM 操作、网络请求、代码结构等多方面入手,不断进行优化和改进,以提供更流畅的用户体验。同时,要根据具体的应用场景和需求,选择合适的优化策略,确保性能优化的效果和可行性。
|
6月前
|
Web App开发 缓存 JavaScript
优化Vue首页加载速度的实用方法
优化Vue首页加载速度的实用方法
74 1
|
1月前
|
JavaScript
vue尚品汇商城项目-day03【16.开发Search组件模块中的TypeNav商品分类菜单(过渡动画效果)+17.(优化)针对三级菜单联动进行优化,优化方向为减少查询】
vue尚品汇商城项目-day03【16.开发Search组件模块中的TypeNav商品分类菜单(过渡动画效果)+17.(优化)针对三级菜单联动进行优化,优化方向为减少查询】
35 0

相关内容推荐

seo域名的选取太仓seo排名公司什么是做SEO卖药seo推广汉中seo优化方案肇庆企业seo排名北京影视SEO招聘seo网站url结尾保定优化seo搜索ppc seo 自建站谷歌seo软件广告金华seo优化需求国内seo优化厂商涟源seo网络优化常见seo黑帽合肥seo优化招聘嘉定seo有效吗网站布局结构 seo烟台新站seo外包SEO h5天机seo怎么注册手机seo如何操作顶级SEO讲师培训新县seo推广费用海瑶seo好吗在线qq代码seo谷歌seo多久排名桂平seo优化软件seo综合查询教程seo公司如何转型nuxt如何实现seo骐翔云seoseo上海站排名辛集网站优化seo什么cms好做seo珠海seo推广技巧苏州seo优化方式seo网络推广须知seo标题制作要点seo的考核指标seo转新媒体阿里云网站seo北京长沙seo优化赣州seo外包服务猫鼬seo博客SEO的账户搭建嘉定seo选哪家seo 引擎优化 meta优优商城seo邯郸seo优化服务网络seo推广工资如何用seo思维seo三大优势陕西seo优化排名广西seo哪家好天津seo优化中心手机电脑seo苏州seo推广效果SEO推广公司排行书店seo优化方案常州页面seo推广济南网站怎么seo潞城seo优化网络ppc seo 自建站seo高薪招聘招聘鼎湖seo推广服务影视公司SEO培训seo基础链接大全网站如何seo首选免费建站seo排名佳缘网站seo遵义公司网站seo鼎湖seo推广公司龙岩seo优化推荐江苏谷歌seo策划第3季seo永川seo招聘信息灰色行业seo排名鼎湖seo推广公司seo专业分析报告海城网络优化seo学seo培训课程seo自助建站平台优化淘宝seo方法青岛seo排名方案Hyein Seo恶魔大衣无忧seo新浪博客涂强 合肥 seo太原seo服务电话重庆seo博客新浪怎么找seo合作浦城企业seo推广seo产生的背景滕州seo免费培训北京SEO行者无敌随州seo优化案例酒店seo优化销售界首市seo优质的seo价格SEO推广公司排行朔州seo分析工具深圳海瑶seoseo域名详细讲解靖江seo快排临沂seo如何优化seo转型和运营南皮网页seo优化抖音满城seo河南省seoseo 谷歌禁用词亳州短视频seoseo排名工具方案seo例子分析优化站长之家seo指数王通淘宝seoSEO观察记录时间太原seo优化网站seo首页霸屏黄州seo优化推荐蓬莱seo外包平台浙江seo优化方案seo韩语翻译中文一全谷歌seo徐汇seo推广培训seo的进步视频网站首页seo标题seo排名稳定技巧揭阳网站seo外包连江seo厂家价格淘宝seo成功店铺热热资源在线seoSEO培训讲师招聘seo运营怎么操作湖南seo专业定制杭州网络seo池州seo推广效果昌邑整站seo优化业网站seo软件潍坊网站seo排行seo中网站架构朝铜光SEO网站制作云seoSEO2019前景云南seo红酒咖啡湛江网站结构seo大连seo外包方式湖北seo推广价格福建seo培训公司麒麟seo采集工具上海seo软件厂家seo288.cn平山seo优化公司江门seo外包方案谷歌seo价格优惠哪里有seo电话seo首页推广代理网站seo搜索优前端需要懂得seoSEO目录书店上海嘉兴seo排名费用俄罗斯seo eaSEO文案短句励志凯里seo优化企业红殿堂seo论坛seo论坛怎么注册广州快速seo软件极速seo快排seo批量产品seo在线培训首推温州产品seo优化seo营销的特点南沙搜狗seo公司google seo优化公司苏州seo推广程序人刘新seoseo优化好书推荐网络seo推广排名云东海seo方法seo服务工程网页收录数据seo重庆seo全网推广seo助理招聘 菲律宾运营seo优化理念seo命名规则讲解广安seo哪家好seo查询搜狗权重厦门seo优化思路重庆整站seo策略discuz seo好做吗杭州seo优化诊断细分市场谷歌seoseo桥接页面seo常见手法引流seo和sem岗位做seo推广销售做seo工资多少seo资源站徐汇seo推广培训增城福州seo顾问网页链接seo设计

合作伙伴

璇泰初网络

www.tjwyj.com
idc.urkeji.com
www.xtcwl.com
www.he1tech.com
zz.urkeji.com
www.mtcddc.cn
www.07yue.com
idc.urkeji.com
seo.jsfengchao.com
www.28j.com.cn
www.3phw.com
niu.seo5951.com
www.akz.net.cn
seo.jsfengchao.com
www.lyhbj.cn
www.innatjerome.com
baidu.07yue.com
www.andmedia.cn
www.07yue.com
dh.jsfengchao.com