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. 图片过大导致性能问题

  • 原因:上传的图片文件过大,导致内存占用过高,应用卡顿甚至崩溃。
  • 解决方法
    • 在上传前对图片进行压缩处理,可以使用插件如 lrzcompressorjs
    • 限制用户上传的图片大小,例如通过 uni.chooseImagesizeType 参数限制为压缩图。
    uni.chooseImage({
      count: 1,
      sizeType: ['compressed'], // 使用压缩图
      success: (res) => {
        const tempFilePaths = res.tempFilePaths;
        // 处理图片上传
      }
    });

2. 上传过程中主线程阻塞

  • 原因:上传图片时,如果处理逻辑过于复杂或同步操作过多,可能会导致主线程阻塞。
  • 解决方法
    • 将上传和图片处理逻辑放到异步任务中执行,避免阻塞主线程。
    • 使用 Promiseasync/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. 富文本编辑器本身的性能问题

  • 原因:某些富文本编辑器在处理大量内容或图片时性能较差。
  • 解决方法
    • 尝试使用性能更好的富文本编辑器,例如 quilltinymce
    • 优化富文本编辑器的配置,例如限制图片的最大数量或大小。

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' });
      }
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!