uni-app 富文本编辑器上传图片后整个app卡住
uni-app 富文本编辑器上传图片后整个app卡住
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win 10 | HBuilderX |
产品分类:
uniapp/App
PC开发环境操作系统:
Windows
HBuilderX类型:
正式
HBuilderX版本号:
3.99
手机系统:
Android
手机系统版本号:
Android 13
手机厂商:
华为
手机机型:
荣耀v30
页面类型:
vue
vue版本:
vue3
打包方式:
云端
操作步骤:
- 富文本编辑器上传图片
预期结果:
- 上传完成,获取图片地址,在弹窗内重写图片尺寸插入编辑器内
实际结果:
- 上传成功,整个app 卡住
bug描述:
- 使用uni-app 自带的富文本编辑器,自定义上传图片事件,上传完成后整个app 卡住。
- 补充说明:是往富文本插入图片资源后整个页面点击无反应,无法触发任何点击事件,但是输入框可以输入。
3 回复
我在模拟器与真机测试了一下并未复现该问题,而你上传的demo缺少组件,请提供一个完整的demo压缩包
原因:watch监听,赋相同值依然会触发变化,导致崩溃
在使用 uni-app 开发时,如果富文本编辑器上传图片后整个应用卡住,可能是由于以下几个原因导致的。以下是一些可能的原因和解决方法:
1. 图片过大导致性能问题
- 原因:上传的图片文件过大,导致内存占用过高,应用卡顿甚至崩溃。
- 解决方法:
- 在上传前对图片进行压缩处理,可以使用插件如
lrz
或compressorjs
。 - 限制用户上传的图片大小,例如通过
uni.chooseImage
的sizeType
参数限制为压缩图。
uni.chooseImage({ count: 1, sizeType: ['compressed'], // 使用压缩图 success: (res) => { const tempFilePaths = res.tempFilePaths; // 处理图片上传 } });
- 在上传前对图片进行压缩处理,可以使用插件如
2. 上传过程中主线程阻塞
- 原因:上传图片时,如果处理逻辑过于复杂或同步操作过多,可能会导致主线程阻塞。
- 解决方法:
- 将上传和图片处理逻辑放到异步任务中执行,避免阻塞主线程。
- 使用
Promise
或async/await
优化代码。
async function uploadImage(filePath) { try { const compressedImage = await compressImage(filePath); // 异步压缩图片 const result = await uploadToServer(compressedImage); // 异步上传 console.log('上传成功', result); } catch (error) { console.error('上传失败', error); } }
3. 富文本编辑器本身的性能问题
- 原因:某些富文本编辑器在处理大量内容或图片时性能较差。
- 解决方法:
- 尝试使用性能更好的富文本编辑器,例如
quill
或tinymce
。 - 优化富文本编辑器的配置,例如限制图片的最大数量或大小。
- 尝试使用性能更好的富文本编辑器,例如
4. 网络请求超时或失败
- 原因:上传图片时,网络请求超时或失败,导致应用卡住。
- 解决方法:
- 增加网络请求的超时时间。
- 捕获网络请求的异常,并给出用户提示。
uni.uploadFile({ url: 'https://example.com/upload', filePath: tempFilePaths[0], name: 'file', timeout: 10000, // 设置超时时间 success: (res) => { console.log('上传成功', res); }, fail: (err) => { console.error('上传失败', err); uni.showToast({ title: '上传失败,请重试', icon: 'none' }); } });