Uniapp 实现定时器管理器

168 2024年03月30日 前端

在开发一个包含多个任务和页面的 UniApp 应用时,需要定时器来执行不同的任务,每个页面执行一个定时器的话,会导致应用性能耗电比较高,容易导致内存泄露,会出现闪退等问题。

此时,可以创建一个定时器管理器,公共管理定时器,各个页面的任务加入到任务队列中执行。


let timerId = null;  
let taskQueue = [];  
  
function executeTasks() {  
    taskQueue.forEach(task => {  
        if (task.shouldRun()) {  
            task.run();  
        }  
    });  
}  
  
function startTimer(interval) {  
    if (timerId) {  
        clearInterval(timerId);  
    }  
    timerId = setInterval(executeTasks, interval);  
}  
  
function addTask(task) {  
    taskQueue.push(task);  
    // 如果定时器未启动,则启动它  
    if (!timerId) {  
        startTimer(task.interval || 1000); // 默认间隔为1秒  
    }  
}  
  
function removeTask(task) {  
    const index = taskQueue.indexOf(task);  
    if (index !== -1) {  
        taskQueue.splice(index, 1);  
        // 根据需要调整定时器间隔或停止定时器  
    }  
}  
  
export default {  
    addTask,  
    removeTask,  
    // 可以添加其他管理任务的方法...  
};

在页面中使用

import timerManager from '@/utils/timerManager.js';  
  
export default {  
    data() {  
        return {  
            // ...  
        };  
    },  
    mounted() {  
        const myTask = {  
            run: () => {  
                // 执行任务逻辑  
                console.log('执行任务');  
            },  
            shouldRun: () => {  
                // 根据条件判断是否执行任务  
                return true;  
            },  
            interval: 2000 // 每2秒执行一次  
        };  
          
        timerManager.addTask(myTask);  
    },  
    beforeDestroy() {  
        // 假设你能够获取到之前添加的任务对象  
        timerManager.removeTask(myTask);  
    }  
};
评论

0 条评论
OBJUI公众号
热门文章
  • go语言怎么连接mysql,并实现增删改查

    要使用Go语言连接MySQL,需要使用第三方库。常用的库包括: 这里以go-sql-driver/mysql为 […]

  • 使用Echarts画甘特图

    Echarts是一个非常强大的图表库, 下面我们来使用它来画甘特图,

  • beego实现模块化开发

    Beego 框架可以通过模块化开发来提高项目的可维护性和可扩展性,可以将一个大型的应用划分为多个模块,每个模块独立维护,有自己的控制器、视图和模型等。

  • Beego实现JWT

    Beego是一个基于Go语言的Web框架,实现JWT认证可以通过beego的中间件机制来实现,下面是一个简单的 […]

  • go实现MD5

    在这个示例中,我们使用了Go标准库中的crypto/md5包来计算一个字符串的MD5值。首先,我们将字符串转换 […]

  • 使用Axios+PHP+JWT实现登录认证

    JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。

  • PHP解决雪花算法ID在前端精度丢失的问题

    雪花算法(Snowflake)是一种用于生成全局唯一ID的算法,其基本思路是结合时间戳、机器ID、租约ID和序列号生成一个64位的数据,从而保证ID的唯一性。 雪花算法的生成过程如下:

  • Linux服务器Rsync结合inotify同步文件

    一、实现效果 服务器A:192.168.161.150 (分布服务器)(rsync客户端+inotify) 服务器B:192.168.161.151 (WEB服务器1)(rsync服务端) 服务器C:192.168.161.152 (WEB服务器2)(rsync服务端) 说明:服务器A有文件更新,自动同步到服务器B和C

  • wordpress自定义配置

    在制作插件时,自定义的配置项是经常会遇到的。在左侧“配置”的常规菜单下添加配置以下代码可实现:

  • JavaScript中async和await的应用

    async和await是ES7中引入的关键字,用于简化Promise操作,提高Promise代码的可读性和理解性。它们结合使用可以使得异步调用不返回Promise对象,而直接把then回调函数的第一个形参result给返回出来,使代码更节俭,开发效率更高。