【elemen/js】阻塞UI线程导致的开关卡顿如何优化

如上图,关闭开关时由于我的方法中有报告生成过程,会阻塞UI线程,在导出完成之前,用户界面会完全冻结,造成卡顿感

javascript 复制代码
const handlePowerSwitch = async on => {
  consoleStore.runningInfo = { ...consoleStore.info };
  const res = await appStore.changePowerAction(on);
  // 若开关机失败 开关要复原
  if (!res.success) {
    appStore.power_action = !on;
  }
  // 单机版停止调度时记录仿真报告
  if (appStore.features === 'emulator' && !on) {
    if (window.exportSimulationReport) {
      window.exportSimulationReport();
    }
  }
  
};

为了防止界面卡顿,我们需要让导出操作异步执行,不阻塞主线程。使用 setTimeout 让出控制权:

javascript 复制代码
const handlePowerSwitch = async on => {
  consoleStore.runningInfo = { ...consoleStore.info };
  const res = await appStore.changePowerAction(on);
  // 若开关机失败 开关要复原
  if (!res.success) {
    appStore.power_action = !on;
  }
  // 单机版停止调度时记录仿真报告
  if (appStore.features === 'emulator' && !on) {
    if (window.exportSimulationReport) {
      setTimeout(() => {
        window.exportSimulationReport();
      }, 100);
    }
  }
  
};
相关推荐
似水明俊德9 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
Thera77710 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚11 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon11 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头11 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun31415911 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
Moksha26211 小时前
5G、VoNR基本概念
开发语言·5g·php
jzlhll12312 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
W.D.小糊涂12 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库
用头发抵命12 小时前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript