重庆网站建设公司夹夹虫专业,自己做网站需要哪些流程,城市旅游网站开发,手机app免费下载语言层面的优化
使用明确的数据类型#xff0c;避免使用模糊的数据类型#xff0c;例如ESObject。
使用AOT模式
AOT就是提前编译#xff0c;将字节码提前编译成机器码#xff0c;这样可以充分优化#xff0c;从而加快执行速度。
未启用AOT时#xff0c;一边运行一边进…语言层面的优化
使用明确的数据类型避免使用模糊的数据类型例如ESObject。
使用AOT模式
AOT就是提前编译将字节码提前编译成机器码这样可以充分优化从而加快执行速度。
未启用AOT时一边运行一边进行机器码的生成。 开启AOT后设备能直接运行已经提前优化过的机器码大大提高执行速度。
应用启动优化
应用阶段划分
第一阶段应用进程的创建和初始化第二阶段App和Ability的初始化第三阶段Ability生命周期第四阶段加载绘制首页
每个启动阶段的优化策略
第一阶段优化设置合适分辨率的应用图标第二阶段优化减少首页Ability或者Page中import的模块数量不是首页必须的模块可以使用动态异步加载如await import(‘Page’)第三阶段优化Ability生命周期方法中对于耗时操作进行异步处理第四阶段优化延迟加载减少不必要的首页内容。例如使用LazyForEach替换ForEach
LazyForEach替换ForEach
LazyForEach是一种懒加载的模式在循环绘制组件时能显著提升页面的加载速度。结合cacheCount方法能控制列表的缓存数量实现更优的滑动体验。
减少丢帧卡顿
避免在主线程上执行耗时操作将耗时操作放在TaskPool或者Worker等后台进程中执行从而防止主线程负载过高。减少渲染进程的冗余开销使用资源图代替绘制、合理使用renderGroup、尺寸位置使用整数。减少试图嵌套层级组件复用控制状态变量关联的组件数量在对象上谨慎使用状态变量进行关联
优化案例
组件转场动画推荐使用transition不推荐使用animateTo方法。
减少animateTo方法的使用数量一起变更比分开变更更加高效。
多次animateTo时统一更新状态变量减少多次更新状态变量导致的开销。
使用RenderGroup可以缓存组件及其子组件的绘制从而降低绘制负载优化渲染性能。适合没状态绑定的不变组件如果有状态绑定当状态变化时缓存就是失效了。
使用Reusable标记复用组件适用频繁创建和销毁的组件或反复切换条件渲染的控制分支且控制分支中的组件子树结构相同。
不推荐使用更新单个状态变量的形式控制多个组件的更新命令式 推荐使用状态变量和组件一对一绑定的方式以数据变更驱动组件的刷新声明式
合理控制状态变量更新范围避免关联刷新大量组件。关联变化较大的状态变量可以通过对象组合成一个状态变量针对渲染成本较高的组件建议使用独立的状态变量进行关联。
理解Prop和ObjectLink的区别Prop是深拷贝关联ObjectLink是浅拷贝关联因此优先推荐使用ObjectLink的方式从而减少系统内存开销。
性能调优工具
Profile调优工具
合理使用布局
组件布局属性width、height、padding、margin等大小发生变化会导致受影响的整个组件树重新更新而非布局属性Color、BackgroundColor、opacity等的变化仅影响组件自身。这一点跟Web界面的渲染机制类似因此我们在更新界面元素时尽量减少布局属性的变化防止影响整个组件的重新渲染。如果某些组件需要经常变化可以将组件置于一个固定布局这个布局内布局属性固定内将影响固定在这个固定布局内部从而减少对其他组件的影响。
精简节点数
移除冗余节点使用扁平化布局减少节点数 扁平化方法通过将嵌套结构摊开减少中间节点从而提升渲染速度。常用方法有
通过RelativeContainer 相对布局实现扁平化通过锚点定位实现扁平化通过Grid布局实现扁平化
利用布局边界减少计算
对于能够在初期给定宽高的组件在进行UI描述时尽量给定宽高数值能够减少由于容器尺寸变化造成的重新测算过程的性能。
合理控制元素的显示与隐藏
首次绘制时if会根据是否为true决定是否创建组件而visibility组件无论是否显示都要创建组件。 再次显示时if由于首次没有创建组件再次显示时会创建组件并经过Measure和Layout阶段。而visibility组件已经创建过只需要经过Measure和Layout阶段。
只有初始的一次渲染或者交互次数很少的情况下建议使用if条件判断来控制元素的显示与隐藏效果对于内存有较大提升。如果会频繁响应显示与隐藏的交互效果建议使用切换Visibility.None和Visibility.Visible来控制元素显示与隐藏提高性能。