s***@163.com
s***@163.com
  • 发布:2022-09-23 10:58
  • 更新:2022-09-26 15:33
  • 阅读:427

【报Bug】setTimeout 造成迟延问题,性能问题

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 功能体验包 1000.22000.778.0

HBuilderX类型: 正式

HBuilderX版本号: 3.6.3

第三方开发者工具版本号: 1.06.2206020

基础库版本号: 2.24.6

项目创建方式: HBuilderX

示例代码:

pages/index.vue

<template>  
    <Toast2 ref="toast2" />  

    <button style="margin-top:100px" @click="()=>toast2.showit()">显示</button>  
</template>  

<script lang="ts">  
import {  
    ref  
} from 'vue';  

import Toast2 from '@/components/Toast2.vue';  

export default {  
    components: {  
        Toast2  
    },  

    setup() {  
        const toast2 = ref(null);  
        return {  
            toast2  
        }  
    },  
};  
</script>

/components/Toast2.vue

<template>  
    <view :class="['toast', cls]">测试来了</view>  
</template>  

<script lang="ts">  
import {  
    ref  
} from 'vue';  

export default {  
    setup() {  
        let id = 0;  
        const cls = ref('');  

        const showit = function () {  
            clearTimeout(id);  
            cls.value = 'toast-show';  

            id = setTimeout(() => {  
                cls.value = '';  
            }, 1000);  
        };  

        return {  
            cls,  
            showit  
        }  
    }  
}  
</script>  

<style>  
.toast {  
    position: fixed;  
    z-index: 1002;  
    left: 50%;  
    top: 50%;  
    background: #210e3bc4;  
    border-radius: 8rpx;  
    color: #fff;  
    padding: 30rpx 60rpx;  
    font-size: 36rpx;  
    opacity: 0;  
    white-space: nowrap;  
    border: solid 1px #2b294f;  
    pointer-events: none;  
}  

.toast-show {  
    opacity: 1;  
    display: block;  
}  
</style>

操作步骤:

点击“显示按钮”,提示层将会显示,等提示层自动隐藏后立刻再次点击“显示按钮”,提示层没有立即显示出来,产生有迟延,微信小程序工具开发则没有这个问题

预期结果:

提示层立即显示出来

实际结果:

提示层没有立即显示出来,产生有迟延

bug描述:

经测试,iOS没有复现所说问题,安卓才能复现

点击“显示按钮”,提示层将会显示,等提示层自动隐藏后立刻再次点击“显示按钮”,提示层没有立即显示出来,产生有迟延,微信小程序工具开发则没有这个问题

2022-09-23 10:58 负责人:无 分享
已邀请:
s***@163.com
  • s***@163.com (作者)

    点击第2次后,很久才显示消息

    2022-09-23 12:14

  • s***@163.com (作者)

    可以点击上面链接查看录屏效果

    2022-09-23 13:44

  • s***@163.com (作者)

    性能如此的差,真是晕死

    2022-09-23 18:40

s***@163.com

s***@163.com (作者)

项目下载链接:https://gitee.com/sam2028/vue3-demo.git

  • s***@163.com (作者)

    先npm i安装包,npm run dev:mp-weixin运行项目,微信小程序导入目录\dist\dev\mp-weixin看效果

    2022-09-24 09:35

s***@163.com

s***@163.com (作者)

一些点击切换ui也是明显延迟

s***@163.com

s***@163.com (作者)

<view :style="left:${random}px; transition: left ${duration}s ease-out;" @transitionend="transitionend"></view>

setup() {  
    const random = ref(0);  

    const showit = function () {  
        ...  
        random.value = Math.random();  
    }  

    const transitionend = function () {  
        is_visible.value = false;  
    };  
    return {  
        ...  
        showit,  
        transitionend,  
        is_visible  
    }  
}

把定时器换成动画来定时却没有这个问题,现在只能这样解决

DCloud_UNI_LXH

DCloud_UNI_LXH

使用示例并没有复现所说的问题

  • s***@163.com (作者)

    用安卓系统测试

    2022-09-26 18:30

  • s***@163.com (作者)

    我用安卓机测试的,确实很严重,很多用定时器的地方都有延迟,而且差不多1秒。本来以为是微信小程序框架本身的问题,但是用微信小程序开发工具同样用定时器实现没有这个问题。

    2022-09-26 21:24

  • s***@163.com (作者)

    经测试,iOS没有复现所说问题,安卓才能复现

    2022-09-27 09:22

  • s***@163.com (作者)

    如果超过1秒再点击是没有延迟的

    2022-09-27 09:35

  • DCloud_UNI_LXH

    回复 s***@163.com: 给绑定点击事件的元素添加 data-eventsync="true" 属性

    2022-09-27 11:44

  • s***@163.com (作者)

    回复 DCloud_UNI_LXH: 方法有效,解决了

    2022-09-27 13:53

要回复问题请先登录注册