【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);
    }
  }
  
};
相关推荐
San303 分钟前
从零到一:彻底搞定面试高频算法——“列表转树”与“爬楼梯”全解析
javascript·算法·面试
@游子16 分钟前
Python类属性与魔术方法全解析
开发语言·python
JellyDDD18 分钟前
h5上传大文件可能会导致手机浏览器卡死,重新刷新的问题
javascript·上传文件
眠りたいです1 小时前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库
小灰灰搞电子1 小时前
Rust可以取代C++么?
开发语言·c++·rust
cat三三1 小时前
java之异常
java·开发语言
T___T1 小时前
一个定时器,理清 JavaScript 里的 this
前端·javascript·面试
奇树谦1 小时前
【Qt实战】实现图片缩放、平移与像素级查看功能
开发语言·qt
我命由我123451 小时前
Python Flask 开发问题:ImportError: cannot import name ‘Markup‘ from ‘flask‘
开发语言·后端·python·学习·flask·学习方法·python3.11
wjs20241 小时前
Go 语言指针
开发语言