vue_electron项目对SVGA加载出现卡顿、卡死现象的处理,直播类项目

近期Peter 尘在做vue_electron项目的过程中需要使用SVGA动效图,于是乎用了svga.lite插件,意外的是加载图片项目直接崩盘(白屏),CUP占用率直接飙升到100%,特此,在这里记录一下SVGA格式图片踩下的坑:

项目场景:

项目场景:直播平台刷礼物,需要使用较大的SVGA动效图

问题描述:

使用svga.lite插件加载SVGA图片后,连续刷比较大的礼物会出现白屏,内存占用过高,应用直接崩盘的情况
附代码:

import { Downloader, Parser, Player } from "svga.lite";

async playSvga(gift) {
	const downloader = new Downloader();
    const player = new Player("#canvas");
    const parser = new Parser();
    const img = gift.effectImg  
    let data = void 0;
    const fileData = await downloader.get(img);
    data = await parser.do(fileData);
    player.set({
    	loop: 1,
        fillMode: "forwards",
        intersectionObserverRender: true,
    });
    await player.mount(data);
    const popListH = 680;
    const popListW = 287;
    const canvasW = document.getElementById("canvas").width;
    const canvasH = document.getElementById("canvas").height;
    this.sliderStyle.height = parseFloat((canvasH / canvasW) * popListW) + "px";
    player.$on("end", () => {
        this.$store.commit("updateCurrentGiftList", {
        	type: "pop",
        });
        this.showSvga();
    });
     player.start();
},
async showSvga() {
	const gift = state.currentGiftList.length > 0 ? state.currentGiftList[0] : null;
    if (gift) {
    	await this.playSvga(gift);
    }
}

原因分析:

刚开始加载SVGA图时,CUP直接飙到80%+ 之后播放就会稳定到20%-30% 或许svga.lite是轻量级的,由于图片过大加载时存在问题。于是乎就重新下载了插件 ‘svgaplayerweb’,相比于svga.lite,动效图片过多、图片过大的项目还是更适合使用svgaplayerweb,svga.lite适合做移动端WEB项目。

解决方案:引入svgaplayerweb 插件

// NPM安装
npm install svgaplayerweb --save
import SVGA from 'svgaplayerweb';

async playSvga(gift) {
	var player = new SVGA.Player('#popList');
	var parser = new SVGA.Parser('#popList');
	parser.load(gift.effectImg, (videoItem) => {
	player.loops = 1, // 播放次数
	player.clearsAfterStop = true, // 动画结束时,是否清空画布
	player.setVideoItem(videoItem);
        player.startAnimation();
        player.onFinished(()=>{
        	this.$store.commit("updateCurrentGiftList", {
            	type: "pop",
          	});
          	this.showSvga();
        }) 
	})
},
async showSvga() {
      const gift = state.currentGiftList.length > 0 ? state.currentGiftList[0] : null;
      if (gift) {
      	await this.playSvga(gift);
      }
    },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要整合electron,你需要执行以下步骤: 1. 在你的Vue项目根目录下,安装electron: ``` npm install electron --save-dev ``` 2. 在package.json中添加以下scripts: ``` "scripts": { "electron": "electron ." } ``` 3. 创建一个新的文件夹,名为electron。在electron文件夹下,创建一个main.js文件。在main.js中,添加以下代码: ``` const { app, BrowserWindow } = require('electron') const path = require('path') function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false, enableRemoteModule: true, }, }) win.loadFile('dist/index.html') } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) ``` 4. 在package.json中添加以下scripts: ``` "scripts": { "electron": "electron .", "build": "vue-cli-service build", "build-electron": "npm run build && electron-builder" } ``` 5. 安装electron-builder: ``` npm install electron-builder --save-dev ``` 6. 在根目录下创建electron-builder.json文件,添加以下配置: ``` { "appId": "com.example.app", "productName": "My App", "directories": { "output": "dist_electron" }, "files": [ "dist/**/*", "main.js", "package.json" ], "mac": { "target": "dmg" }, "win": { "target": "nsis" } } ``` 7. 运行以下命令进行打包: ``` npm run build-electron ``` 8. 打包成功后,会在根目录下生成dist_electron文件夹,其中包含可执行文件。执行以下命令启动electron应用: ``` npm run electron ``` 如果你按照以上步骤操作,但是并没有生成dist_electron文件夹,可能是因为electron-builder没有被正确安装或配置。你可以尝试重新安装electron-builder,并检查你的electron-builder.json文件是否正确配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值