性能优化专题uni

虽然开发者在一个vue页面里写js和css,但其实,编译时就已经将它们拆分了。

逻辑层是运行在一个独立的jscore里的,它不依赖于本机的webview,所以一方面它没有浏览器兼容问题,可以在Android4.4上跑es6代码,另一方面,它无法运行window、document、navigator、localstorage等浏览器专用的jsAPI。

jscore就是一个标准js引擎,标准js是可以正常运行的,比如if、for、各种字符串、日期处理等。js和浏览器的区别要注意区分开来。`

h5和小程序平台,以及app-vue,视图层是webview。而app-nvue的视图层是基于weex改造的原生渲染视图。

关于webview,在iOS上,只能使用iOS提供的Webview(默认是WKWebview)。它有一定的浏览器兼容问题,iOS版本不同,它的表现有细微差异(一般可忽略)。

Android上小程序大多自带了一个几十M的chromiumwebview,而App端没办法带这么大体积的三方包,所以App端默认使用了Androidsystemwebview,这个系统webview跟随手机不同而有差异。当然App端也支持使用腾讯X5引擎,此时可以在Android端统一视图层。

所以uni-app的js基本没有不同手机的兼容问题(因为js引擎自带了),而视图层的css,在app-vue上使用系统webview时会有手机浏览器的css兼容问题。此时或者不要用太新的css语法,或者集成腾讯x5引擎。

逻辑层和视图层分离,好处是js运算不卡渲染,最简单直接的感受就是:窗体动画稳。

如果开发者使用过App,应该有概念,webview新窗体一边做进入动画,一边自身渲染,很容易卡动画。而uni-app则无需写预载代码,新窗体渲染快且动画稳定。

但是两层分离也带来一个坏处,这两层互相通信,其实是有损耗的。

iOS还好,但Android低端机上,每次通信都要耗时几十毫秒。平时看不出来影响,但有几个场景表现明显。

不管小程序还是app,不管app-vue还是app-nvue,都有这个两层通信损耗的问题。

解决这类问题,在webview渲染和原生渲染引用了不同的做法:

wxs中可以监听手势,以uniui的swiperAction组件为例,手指拖动,侧边的列表菜单项要跟手滑出,此时就需要使用wxs才能实现流畅效果。还有插件市场里一些自定义下拉刷新的插件,通过wxs实现了更高的性能体验。

在app-nvue里,逻辑层和视图层的折损一样存在。包括reactnative也有这个问题。所以也千万别以为原生渲染就多么高级。

bindingx作为一种表达式,它的功能不及js强大,但手势监听、动画还是可以实现的,比如uniui的swiperAction组件在app-nvue下运行时会自动启用bindingx,以实现流畅跟手。

对于复杂页面,更新某个区域的数据时,需要把这个区域做成组件,这样更新数据时就只更新这个组件,否则会整个页面的数据更新,造成点击延迟卡顿。

比如微博长列表页面,点击一个点赞图标,赞数要立即+1,此时这个点赞按钮一定要做成组件。否则这个+1会引发页面级所有数据的从js层向视图层的同步。

app-nvue和h5不存在此问题。造成差异的原因是小程序目前只提供了组件差量更新的机制,不能自动计算所有页面差量。

页面中若大量使用大图资源,会造成页面切换的卡顿,导致系统内存升高,甚至白屏崩溃。

尤其是不要把多张大图缩小后显示在一个屏幕内,比如上传图片前选了数张几M体积的照片,然后缩小在一个屏幕中展示多张几M的大图,非常容易白屏崩溃。

对大体积的二进制文件进行base64,也非常耗费资源。

在uni-app中,定义在data里面的数据每次变化时都会通知视图层重新渲染页面。所以如果不是视图所需要的变量,可以不定义在data中,可在外部定义变量或直接挂载在vue实例上,以避免造成资源浪费。

页面初始化时,逻辑层如果一次性向视图层传递很大的数据,使视图层一次性渲染大量节点,可能造成通讯变慢、页面切换卡顿,所以建议以局部更新页面的方式渲染页面。如:服务端返回100条数据,可进行分批加载,一次加载50条,500ms后进行下一次加载。

深层嵌套的节点在页面初始化构建时往往需要更多的内存占用,并且在遍历节点时也会更慢些,所以建议减少深层的节点嵌套。

有些nvue页面在Android低端机上初次渲染时,会看到从上到下的渲染过程,这往往都是因为组件过多导致的。每个组件渲染时都会触发一次通信,太多组件就会阻塞通信。

THE END
1.十种Uniapp的优化方式uniapp性能优化Uni-app是一个基于Vue.js的跨平台应用开发框架,旨在帮助开发者快速构建多端应用。 1、使用生产环境构建:在部署到生产环境之前,确保使用Uni-app的生产构建版本,它会进行代码压缩和性能优化。 2、避免不必要的数据绑定:减少使用不必要的双向绑定和计算属性,尽量直接使用 props 传递数据。 https://blog.csdn.net/qq_51810680/article/details/132220944
2.uniapp开发微信小程序时,有哪些性能优化的技巧大家好,我是威哥,在使用uni-app开发微信小程序时,性能优化是提升用户体验的关键。今天的内容,整理了以下13个有效的性能优化技巧,供你在开发中参考: 1. 减少页面层级和组件嵌套: 减少页面层级和组件嵌套是前端性能优化中的常见做法,它有助于减少浏览器的渲染负担,提高页面的响应速度。我们通过以下优化前后的示例对比https://blog.51cto.com/weige87/12107684
3.深度剖析uniapp:优劣并存的跨平台开发利器对于设备访问,uni-app 的 API 更是大显身手。例如,当需要获取地理位置信息来为用户提供周边服务推荐时,有专门的 API 来支持实现;想要调用设备的摄像头、麦克风等硬件资源来实现拍照、录音等功能,也能轻松做到;甚至可以获取设备的系统信息,以便根据不同设备特性来优化应用的展示和交互效果等。总之,丰富的 API 让开发https://www.jianshu.com/p/e35cf9f3f305
4.Uniapp优化打包大小1.按需加载组件按需引入:只引入和使用你使用uni-app的构建优化配置:在manifest.json中配置构建选项,设置构建模式和其他优化选项。 8. 减少第三方插件和组件 优化插件使用:尽量减少对第三方插件的依赖,选择最小化功能实现的插件。 按需加载插件:如有必要,只在需要的地方加载插件,避免全局引入不必要的插件。 https://juejin.cn/post/7406891999345721382
5.uniapp性能优化实战之逻辑层条件编译的生产环境uni-app 性能优化 逻辑层和视图层分离,非H5终端通信损坏当uni应用程序在非H5端运行时,它在架构上分为两个部分:逻辑层和视图层。逻辑层负责执行业务逻辑,即运行js代码,视图层负责页面呈现。 虽然开发人员在一个vue页面中编写js和css,但实际上,它们在编译时已经被分割。 https://open.alipay.com/portal/forum/post/161601028
6.uniapp开发跨端小程序包过大优化小金鱼紫苏uni-app开发跨端小程序包过大优化 以微信小程序为例: 一:避免使用大图 图片压缩之后使用,避免大图,必要时可以使用雪碧图或者svg,图片上传远程服务器,不占用本地资源包。二:分包处理 二:微信小程序单包不超过2M,最多10个包。 合理分包,将文件放到合适的地方。除一级页面入口放到主包,剩余页面逻辑都可以拆分成https://www.cnblogs.com/yuanyuan0809/p/17787295.html
7.uniapp开发app性能太差,uniapp用的多吗新闻资讯在移动应用开发领域,uniapp作为一种跨平台开发解决方案,受到了越来越多开发者的青睐。uniapp具有诸多优势,如高效的开发速度、优秀的跨平台兼容性、丰富的组件库等。然而,uniapp开发的移动应用性能如何?这一问题备受关注。本文将就uniapp开发的移动应用性能进行探讨,并为大家介绍优化技巧。 https://www.ahbfapp.com/news/3248.html
8.前端环信uniapp本次关于 uni-app 代码整体重构工作,基于上一期针对 uni-app 官网 demo 从 vue2 迁移 vue3 框架衍生而来,在迁移过程中有明显感知,目前的项目存在的问题为,项目部分代码风格较为不统一,命名不够规范,注释不够清晰、可读性差、以造成如果复用困难重重,本地重构期望能够充分展示 api 在实际项目中的调用方式,尽可能https://segmentfault.com/a/1190000043808191
9.uniapp中如何优化图片加载速度uniappuniapp中如何优化图片加载速度 在移动应用开发中,图片是一个重要的资源,但是图片的加载速度可能会影响用户的使用体验。在uniapp中,我们可以采取一些措施来优化图片的加载速度,提升应用的性能。本文将介绍uniapp中如何优化图片加载速度的方法,并提供相应的代码示例。 https://www.php.cn/faq/572354.html