uniApp分析

599 阅读2分钟

uniApp分析

1、优势

  • 自带HBuilder 开发工具,使用起来方便,可视化程度高。
  • 增加条件编译,可以使用平台特有的api
  • 生态丰富,拥有插件市场、DCloed管理后台。
  • 基于Vue框架开发,对于使用Vue框架的开发工程师来说友好。

2、缺点

  • api更新频繁,不稳定,会出现因api版本更新出现的bug。
  • 很多vue内置的方法实现不了。
  • 基于vue开发,需要继承vue API, 打包后体积过大。
  • 开发阶段,热更新效率慢。
  • 采用运行时机制,执行效率不如原生小程序高

3、实现原理

原理:编译器 + 运行时 配合使用。

1、编译器

  • 利用 babel 工具通过 AST 进行转译
  • uniApp 采用vue.js 语法规范,uniApp 在编译阶段将 .vue 格式的文件拆分为小程序的多文件。

2、运行时: 实现vue与小程序的 数据同步,事件同步,生命周期管理。

  • runtime 将小程序的数据绑定,托管给Vue,Vue数据变化后,通过uni-app Runtime 的数据同步机制将数据传递给小程序。
  • 当小程序视图层 事件触发、滚动等操作后,先触发小程序的事件函数,uni-app Runtime的事件代理机制触发vue的函数。
  • 小程序的生命周期纳入到vue的生命周期中。

1593509697894-7f6d5825-6d08-44ba-948a-44324bf4f3d3.png

4、性能优化

  • renders/wxs: 减少setData的调用次数
  • Vue 瘦身: 提升了加载性能和运行性能
  • vue.nextTick: 减少setData的调用次数
  • Diff data : 减少setData传递的数据量。
  • 自定义组件:减少 data diff 范围

1、定制 Vue,移除 vnode

Vue.js 负责数据管理,小程序负责数据渲染

  • 小程序负责数据渲染,页面DOM由小程序生成,小程序只负责页面渲染。
  • Vue 的 vnode 遍历对比维度复杂,但 Vue 维护的 vnode 无法和小程序的真实 DOM 对应

vue的执行流程优化:

  • compile:optimize过程取消,,因为该环节是为了标注静态文本节点,而 Vue 只负责数据,不需要关注 DOM 节点;
  • render function:不生成 vnode
  • patch:不比对 vnode,因为 setData 仅能传递数据,所以我们只比对 data。

2、减少 setData 调用次数

  • 合并响应数据

3、减少setData传递的数据量