1***@qq.com
1***@qq.com
  • 发布:2025-06-26 16:18
  • 更新:2025-06-27 09:43
  • 阅读:90

【报Bug】ctx.measureText 高频调用会导致app闪退

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 4.66

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 5.0.1

手机厂商: 华为

手机机型: Mate 60

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
var ctx = uni.createCanvasContext('myCanvas');  
for(let i = 0; i < 1000; i++){  

    ctx.measureText(i,(res)=>{  
        console.log(res)  
    })  
}  

操作步骤:

进入app,执行如下代码


var ctx = uni.createCanvasContext('myCanvas');  
for(let i = 0; i < 1000; i++){  

    ctx.measureText(i,(res)=>{  
        console.log(res)  
    })  
}

预期结果:

正常运行

实际结果:

继续操作app会闪退,特别是继续调用ctx.measureText 时必现

bug描述:

ctx.measureText 高频调用会导致app闪退

2025-06-26 16:18 负责人:无 分享
已邀请:
DCloud_UNI_HT

DCloud_UNI_HT

频繁调用确实会增加开销,会占用大量内存和线程资源。会导致回调堆积问题 ,每个 measureText 都有一个回调函数,1000 次调用意味着 1000 个回调,容易导致主线程阻塞或内存溢出,从而导致闪退。
建议:

  1. 减少调用次数或者分批处理,或者使用节流或者防抖函数控制调用频率 。
  2. 如果你需要测量的文本是固定的,可以预先测量并缓存结果 ,避免重复调用

要回复问题请先登录注册