IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Electron+Vue3+Vite+Element-Plus,保持软后台全速运行(解决循环过多导致的界面不刷新问题,保证窗口失去焦点后setTimeOut可用) -> 正文阅读

[JavaScript知识库]Electron+Vue3+Vite+Element-Plus,保持软后台全速运行(解决循环过多导致的界面不刷新问题,保证窗口失去焦点后setTimeOut可用)

Electron+Vue3+Vite+Element-Plus,保持软后台全速运行(解决循环过多导致的界面不刷新问题,保证窗口失去焦点后setTimeOut可用)

问题描述

? 在开发时遇到的问题。我使用electron和vue建立的软件需要保证在后台能够全速运行,但在开发过程中遇到了一些问题,首先是对于几十万次甚至几百万次循环导致的界面卡死,无法刷新问题的解决;其次是浏览器内核使setTimeOut在窗口处于后台时,setTimeOut失效问题的解决。

问题一 大循环界面刷新不及时

? 第一次尝试使用js开发软件,软件需要处理几个、几十个甚至几百个拥有80万行的文本文件,循环次数到达了几百万次。

大循环解决

达夫设备

//example: 我有一个1w次的循环需要处理,如何采取高效的循环?
let arrayExample:string[] = [];
arrayExample.length = 10000;
arrayExample.fill('----------');
var len = arrayExample.length;

//通常情况下,一般采用的循环方法为fori,在这种情况下,没循环一次都要重新进入一次。
for (let i = 0; i < len; i++){
    console.log(arrayExample[i])
}

//达夫设备
//我们可以看作for循环里面的内容是一个函数,So

const process = (i:number)=>{
    console.log(arrayExample[i])
}

//我们还可以利用case的特性,当case里面没有break时,case会一直运行到底,So

let startAt = len % 8,
	iterations = Math.ceil(len/8),
    j = 0;

do{
    switch (startAt) {
        case 0: process(j++);
        case 7: process(j++);
        case 6: process(j++);
        case 5: process(j++);
        case 4: process(j++);
        case 3: process(j++);
        case 2: process(j++);
        case 1: process(j++);
    }
    startAt = 0;
} while (--iterations);

? 经过上述办法,循环的速度得到了改善,但是界面不刷新的问题依旧存在。

循环降速,保证刷新

? 如何做到循环速度的降低呢?

? 循环固定次数后暂停10ms?

? 我在代码中使用了一个sleep函数,并用async修饰了处理函数,得到的效果如下:

//sleep函数的实现

function sleep(i:number) {
    return new Promise((resolve)={
        setTimeout(resolve, i);
    });
}

//当然,sleep函数不是必要的,你也可以在await时直接进行return。

//我的处理函数
async function txtProcess(rootDirList:any) {
    ...
    ...
    do {
        //其实我的await在进度改变时才会使用
        await sleep(10);
        switch (startAt) {
            case 0: process(lineValue, j++);
                ...
        }
    }
}

? 经历了上面的改动,保证了界面的流畅刷新,但当我用控制台挡住运行界面时,发现软件的运行速度大大降低。

问题二 保证setTimeout的可用性

? 通过在网上的寻找,我在stackoverflow找到了问题的原因和解决办法。

方法来源地址:StackOverflow同时还有setInterval的解决办法。

原因:Most of the modern browsers (Chrome, Firefox and IE), intervals (window timers) are clamped to fire no more often than once per second in inactive tabs.

大多数现代浏览器(Chrome、Firefox 和 IE)、间隔(窗口计时器)都被限制为在非活动选项卡中每秒触发一次的频率不超过一次。

问题解决

? The Chromium insider also clarified that aggressive throttling will be automatically disabled for all background tabs “playing audio” as well as for any page where an “active websocket connection is present.”

对于所有“播放音频”的后台选项卡以及“存在活动的 websocket 连接”的任何页面,都会自动禁用激进的节流。

播放空声音会强制浏览器保留性能。

插件安装

npm i --save-dev howler
或者通过cnpm安装
cnpm i --save-dev howler

插件地址:Howler.js

使用

//依赖引用
import {Howl, Howler} from 'howler';
const {Howl, Howler} = require('howler');
//声音播放实现

let sounds = new Howl({
  src: ['empty_loop_for_js_performance.wav'],
  volume:0.5,
  autoplay: true, loop: true,
});

function performance_trick()
{
  if(sounds.empty) return sounds.empty.play();
  sounds.empty = new Howl({
    src: ['empty_loop_for_js_performance.wav'],
    volume:0.5,
    autoplay: true, loop: true,
  });
}

空白音源获取

empty_loop_for_js_performance.wav

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:47:38  更:2022-09-24 20:48:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:25:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码