杨大宝
杨大宝
  • 发布:2020-05-08 17:01
  • 更新:2023-04-16 00:17
  • 阅读:6701

nvue渲染速度慢,速度肉眼可见

分类:nvue

nvue 页面的渲染由上至下肉眼可见的速度,非常影响用户体验。应该怎么解决呢?
具体见下图

2020-05-08 17:01 负责人:DCloud_uniAD_HDX 分享
已邀请:

最佳回复

DCloud_heavensoft

DCloud_heavensoft

如果是要解决从上到下渲染的问题:
HBuilderX 3.0更新日志:

  • 【重要】App平台 新增 nvue 组件支持 render-whole 属性。可以按组件整体渲染,而不是从上到下逐行渲染 详情

关于nvue渲染需要注意,nvue虽然是原生渲染,但逻辑层在js里,那么js如果频繁向原生层动态写入渲染数据,就会发生跨进程阻塞。
请注意控制js向渲染层的写入的频次。比如:

  1. v-for渲染内容时注意次数,列表数据每页最好不超过20条。
  2. 减少组件的层次。

在react native、weex这类js引擎+原生渲染的技术上,这个问题就是这样了,框架层面很难优化,需要开发者写代码时注意。
官方已经在做uts和uvue,届时逻辑层和渲染层都在原生上,开发的应用和纯原生一样。大概5月下旬会发。

  • 秋云1

    你这个只解决了第一次渲染的问题,如果更改了数据依然是这样子

    2021-06-28 15:17

  • DCloud_IOS_XTY

    回复 DCloud_IOS_XTY: 你的问题请提供个demo,我们好针对的性分析下问题原因

    2021-06-28 18:26

  • 秋云1

    回复 DCloud_IOS_XTY: 我在https://ask.dcloud.net.cn/question/125993帖子中录了视频,每次修改了数据重新渲染cell的时候就会出现,原数据越长,新数据渲染的时间就越久

    2021-06-29 08:32

  • DCloud_IOS_XTY

    回复 秋云1: 需要提供下demo,需要看下页面和更新数据如何写的

    2021-06-29 16:21

  • 秋云1

    回复 DCloud_IOS_XTY: 敢情你们自己做的东西自己都不用的吗?这问题还需要demo?随便写个超过20条的list更新数据都会出现,论坛提出这个问题的也不止一个,还跟我要demo?

    2021-06-30 08:12

  • DCloud_IOS_XTY

    就算是相似的问题也可能是不同的原因导致的,问你要demo一是为了分析问题,也是为了确认问题,我们要确保每个提出的问题都是验证过的

    2021-06-30 09:45

  • DCloud_heavensoft

    回复 秋云1: 我们受理的问题中,大部分是开发者代码的问题,请理解

    2021-06-30 14:31

  • 农业发展支持者

    6月初了。uts 和uvue 发了吗

    2023-06-05 15:01

杨大宝

杨大宝 (作者)

你好,非常感谢你的回复,我这边多种机型和系统版本都有测试,效果均和以上相似。nvue感觉和vue大不相同,vue打开页面时从入栈开始就已经渲染完了,入栈动画就能看出页面效果,nvue页面打开时先是空白然后逐层渲染,iOS基本没啥影响,仔细看才会有一点点这种感觉,安卓机特别明显,即使高端机也是一样只不过会快一些。

DCloud_Android_ST

DCloud_Android_ST

已收到会调研看下

有问

有问 - 生活,趣与失。

我觉得吧,UNI占手机配置和性能要求比H5要高一些,但H5的加载表现也并不好。不过我建议UNI全部使用VUE,放弃NVUE算了,把VUE搞好就很不错了。反正NVUE限制也多,不方便。

杨大宝

杨大宝 (作者)

如果单纯的解决页面切换带来的问题的话可以参考一下方案。可以明显提升视觉感受。页面内的组件切换渲染建议使用swiper,这样的话也能有效提升用户体验。其他的实在没有很好的方案了,官方目前看来不再重视这块,不过看需求墙正在强化nvue的css写法,到时候可能会有明显的升级吧。

//预加载(仅安卓)增强用户体验  
// #ifdef APP-PLUS  
let preTimeOut = 0;  
if (plus.os.name.toLowerCase() == "android") {  
    const navigateTo = uni.navigateTo;  
    uni.navigateTo = function(params) {  
        params.animationType = "slide-in-right";  
        params.animationDuration = 150;  
        uni.preloadPage({  
            url: params.url,  
            complete: () => {  
                clearTimeout(preTimeOut);  
                preTimeOut = setTimeout(function() {  
                    navigateTo(params)  
                    uni.unPreloadPage({  
                        url: params.url  
                    })  
                }, 200)  
            }  
        })  
    }  
}  
// #endif
  • 2***@qq.com

    但是这样会有一个新问题,老机型要等一段时间才能渲染

    2021-11-25 14:43

  • 2***@qq.com

    很无奈

    2021-11-25 14:47

  • 1***@qq.com

    预加载会引起,生命周期的问题;请慎用

    2022-01-17 16:17

swx

swx

最近更新了版本后,也出现了楼主这情况,希望官方出版本前要严格测试。

  • DCloud_Android_ST

    有具体版本对比吗? 比如说2.6.16 比2.7.0渲染更快这种数据。别说更新了就变慢了这种话没有任何帮助

    2020-05-14 15:28

1***@qq.com

1***@qq.com - 秋南

依然没啥变化,感觉要做优化啊,想搞app这块,就要重新弄一下nvue比较好点

o***@sina.cn

o***@sina.cn

本来想着切换到nvue 提升用户体验的,没想到做的过程中发现 页面渲染速度还没有vue快

  • 1***@qq.com

    确实!!!!

    2022-01-17 16:17

  • DCloud_heavensoft

    回复 1***@qq.com: 那不会。除非是canvas这种nvue不支持的,否则渲染速度nvue是不会比vue慢的。不管vue还是nvue,都需要注意逻辑层和渲染层通讯损耗,减少在js里反复渲染页面数据。然后nvue动效要用bindingx,vue要用renderjs

    2022-01-17 20:09

  • 1***@qq.com

    回复 DCloud_heavensoft: 怎么避免反复渲染数据,比如页面数据是一个model,但是要一个一个赋值

    2022-01-20 00:07

1***@qq.com

1***@qq.com

2年了,也没改善,,,,,,,,,,,

  • DCloud_heavensoft

    nvue的渲染用的就是手机操作系统的原生渲染,这块没啥可优化的。核心就是注意逻辑层和渲染层的通信,不要太频繁。如果逻辑层js不停更新界面,那会因为通信阻塞而导致视觉上渲染速度慢

    2022-01-17 20:12

  • 飞酒

    这就是典型的官方不作为

    2022-01-18 13:07

  • DCloud_heavensoft

    回复 飞酒: 至于逻辑层和渲染层的通信,我们也在尝试一些方案,可能过段时间会有结果

    2022-04-20 21:40

  • note744917

    回复 DCloud_heavensoft: 透漏一下

    2023-04-02 22:45

y***@gmail.com

y***@gmail.com

安卓的渲染速度慢苹果一大截,这都2年过去了,依然如此

DCloud_uniAD_HDX

DCloud_uniAD_HDX

请提供Android系统版本及机型,请提供个简单工程

hhyang

hhyang - 如有问题,请添加QQ1606726660 备注付费咨询

mark

3***@qq.com

3***@qq.com

关注如何解决

c***@gmail.com

c***@gmail.com

这个问题很明显,这个有办法提升吗

寂正

寂正

这么问题和明显,我测试也存在这样的问题,

DCMarvel

DCMarvel

NVUE 与 VUE 页面渲染时机的确不一样.

8***@qq.com

8***@qq.com

不错

邓琪昌

邓琪昌 - uni-app / uni-app-x 多平台多版本兼容的轻量、简洁、高效、全面的移动端组件库

是啊,现在nvue页面这样的渲染用户体验感很不好。期待官方解决。

汉中李

汉中李

希望官方能改善能少些很多代码
现在可以考虑延迟显示,渐显动画

6***@qq.com

6***@qq.com

确实渲染慢

雍渡人

雍渡人

不仅仅慢 如果你tab选项卡 按钮用的渐变背景没办法切换到对于的class的,搞了半天

6***@qq.com

6***@qq.com - 小明

nvue在低端机型上确实白屏严重

3***@qq.com

3***@qq.com

nvue 安卓有外部js引用会导致页面加载缓慢

  • DCloud_heavensoft

    和内外没关系,js里频繁操作页面渲染,就会因为逻辑层和渲染层的通信损耗而导致渲染慢

    2022-01-17 20:10

5***@qq.com

5***@qq.com - APP开发

这种问题怎么解决的,是用uni.preloadPage吗

汉中李

汉中李

uni.preloadPage 不能解决所有问题 继续完善吧

DCMarvel

DCMarvel

uni.preloadPage 这东西是怎么想出来的?想着让开发者自己处理?

现在逻辑 点击NVUE页面-> NVUE页面入栈->触发显示动画->动画完成开始渲染节点->完成

(VUE页面 ->入栈动画渲染同时执行)

添加uni.preloadPage 之后

点击NVUE页面 -> 手动添加uni.preloadPage -> NVUE页面入栈->触发显示动画->动画完成开始渲染节点->完成

多了一步不必要的麻烦

正确的逻辑应该是框架自己处理

点击NVUE页面-> NVUE页面入栈 ->开始渲染节点 ->触发显示动画->动画完成->完成

如果有强烈需求的人 可以 重写uni.navigateTo 用H5+ 的webView(先在屏幕外显示渲染在动画显示)

汉中李

汉中李

点击NVUE页面-> NVUE页面入栈 ->开始渲染节点 ->触发显示动画->动画完成->完成
加一个业务逻辑完成手动关闭动画

Absorbed66c

Absorbed66c - 码农一枚

半年过去了。nvue渲染速度还是那么慢

  • 1***@qq.com

    赞同,nvue里面组件不能太多,不然太明显了,大多数情况下不如vue

    2020-12-10 08:49

999

999

https://ext.dcloud.net.cn/plugin?id=3662 合理使用这个插件,可以改善情况。

Absorbed66c

Absorbed66c - 码农一枚

不知不觉 我已经关注这个问题这么久了

3***@qq.com

3***@qq.com

子列表中 有 多个 image 时会很卡 图片有gif
image 换成 img 。gif不动了,好像就不卡了。。

阿Zone

阿Zone - 加油啊~

我们做聊天,打开聊天窗口,安卓的渲染就慢一拍,特别是安卓低端机,渲染就更慢了,体验不太好。 苹果上倒还好,不是太明显。 求官方解决

7***@qq.com

7***@qq.com

nvue安卓渲染太慢了,能清除的看到渲染的过程,从上往下,偶尔还会闪一下。裂开啊,都好久了 还是这个样子

拒绝抽烟

拒绝抽烟

终于找到组织了,原来这么久的问题得不到解决,官方竟然说是自己代码问题,其实就很简单的列表更新,就会一个一个渲染出来,:render-whole="true" 真的是一点用处都没有,看着好烦,还不如开始就选vue,还说nvue快,哎呀我去,要是弄不好不要这么说嘛,现在都基于nvue了,都不好换vue了

农业发展支持者

农业发展支持者 - 全栈开发工程师

23 年了。问题还不解决。我真服了。没有小程序 uniapp 也就黄了吧

要回复问题请先登录注册