插件的选择确实会对UNI-app项目的性能产生影响。以下是一些关键点,说明插件选择如何影响性能:
逻辑层和视图层的通信折损:非H5端的各个平台,包括App和各种小程序,其逻辑层和视图层是分离的,两层之间通信交互会有折损,导致诸如跟手滑动不流畅。
uni-ui
在底层会利用wxs等技术,把适当的js代码运行在视图层,减少通信折损,保证诸如swiperAction左滑菜单等跟手操作流畅顺滑。自动差量diff数据:在uni-app下,开发App和小程序,不需要手动setData,底层自动会差量更新数据。但如果使用了小程序组件,则需要按小程序的setData方式来更新数据,很难做到自动diff更新数据。
背景停止:很多ui组件是会一直动的,比如轮播图、跑马灯。即便这个窗体被新窗体挡住,它在背景层仍然在消耗着硬件资源。在Android的webview版本为chrome66以上,背景操作ui会引发很严重的性能问题,造成前台界面明显卡顿。而
uni-ui
的组件,会自动判断自己的显示状态,在组件不再可见时,不会再消耗硬件资源。减少一次性渲染的节点数量:插件市场里的一些自定义下拉刷新的插件,通过wxs实现了更高的性能体验。减少一次性渲染的节点数量可以提高性能。
优化数据更新:在
uni-app
中,定义在data里面的数据每次变化时都会通知视图层重新渲染页面。所以如果不是视图所需要的变量,可以不定义在data中,可在外部定义变量或直接挂载在vue实例上,以避免造成资源浪费。长列表优化:长列表中如果每个item有一个点赞按钮,点击后点赞数字+1,此时点赞组件必须是一个单独引用的组件,才能做到差量数据更新。否则会造成整个列表数据重载。
减少引入多余的第三方插件:按需引入插件,避免引入整个库,减小包体积。
尽量使用原生API:使用UniApp的原生API,避免引入外部库。
综上所述,选择性能优化好的插件,可以减少逻辑层和视图层之间的通信折损,自动进行差量数据更新,避免不必要的硬件资源消耗,从而提升UNI-app项目的整体性能。