首页 > 其他分享 >写一个方法记录函数运行的时间

写一个方法记录函数运行的时间

时间:2024-12-15 09:01:32浏览次数:5  
标签:function const 函数 记录 executionTime logExecutionTime fn performance 运行

在前端开发中,记录一个函数运行的时间是一个常见的需求,通常用于性能调优和调试。你可以使用 JavaScript 提供的 Date 对象或者 performance API 来实现这一功能。下面是两种方法的示例:

方法一:使用 Date 对象

Date 对象可以获取当前的时间戳,通过计算函数执行前后的时间差,可以得到函数的运行时间。

function logExecutionTime(fn) {
    const startTime = new Date().getTime();
    fn();
    const endTime = new Date().getTime();
    const executionTime = endTime - startTime;
    console.log(`Function execution time: ${executionTime}ms`);
}

// 示例使用
function exampleFunction() {
    // 模拟一些耗时操作
    for (let i = 0; i < 1e6; i++) {
        // 空操作
    }
}

logExecutionTime(exampleFunction);

方法二:使用 performance API

performance API 提供了更高精度的时间测量功能,适用于需要高精度测量的场景。

function logExecutionTime(fn) {
    const start = performance.now();
    fn();
    const end = performance.now();
    const executionTime = end - start;
    console.log(`Function execution time: ${executionTime.toFixed(2)}ms`);
}

// 示例使用
function exampleFunction() {
    // 模拟一些耗时操作
    for (let i = 0; i < 1e6; i++) {
        // 空操作
    }
}

logExecutionTime(exampleFunction);

比较

  • 精度performance API 通常比 Date 对象更精确,尤其是在需要测量短时间间隔时。
  • 兼容性Date 对象在所有现代浏览器中都有支持,而 performance API 在较新的浏览器中支持更好(IE 9 及以下版本不支持)。

通用封装

为了更通用,你可以将这个功能封装成一个通用的高阶函数,甚至可以扩展以支持异步函数。

同步函数版本

function logExecutionTime(fn) {
    return function (...args) {
        const start = performance.now();
        const result = fn(...args);
        const end = performance.now();
        const executionTime = end - start;
        console.log(`Function execution time: ${executionTime.toFixed(2)}ms`);
        return result;
    };
}

// 示例使用
const exampleFunction = logExecutionTime(function() {
    // 模拟一些耗时操作
    for (let i = 0; i < 1e6; i++) {
        // 空操作
    }
});

exampleFunction();

异步函数版本

对于异步函数,你需要稍微修改一下逻辑,以支持 Promise

async function logExecutionTime(fn) {
    const start = performance.now();
    await fn();
    const end = performance.now();
    const executionTime = end - start;
    console.log(`Function execution time: ${executionTime.toFixed(2)}ms`);
}

// 示例使用
async function exampleAsyncFunction() {
    // 模拟一些异步操作
    return new Promise(resolve => {
        setTimeout(() => {
            for (let i = 0; i < 1e6; i++) {
                // 空操作
            }
            resolve();
        }, 100); // 模拟延迟
    });
}

logExecutionTime(exampleAsyncFunction);

以上方法可以帮助你在前端开发中方便地记录函数运行的时间,从而进行性能分析和优化。

标签:function,const,函数,记录,executionTime,logExecutionTime,fn,performance,运行
From: https://www.cnblogs.com/ai888/p/18607529

相关文章

  • icpc2024昆明补题记录
    D套娃这个trick是真没见过,也难怪场上没几个人过这个代码这么简单的题题目大意给定一排\(n\)个套娃,套娃的大小互不相同。你可以将相邻两个套娃套在一起,问最多能套几次?\[n≤10^5\]题解发现可以\(O(n)\)的判断一个长度为\(n\)的套娃序列是否能合并成一个,接下来从左边开始......
  • 【Google Cloud】VPC Service Controls 的试运行模式
    本文介绍了VPC服务控制的试运行模式。什么是VPCServiceControlsVPCServiceControls是GoogleCloud(以前称为GCP)的一项安全功能。它通过设置一个被称为边界的逻辑围栏,防止从内部到外部和从外部到内部的双向意外访问,从而增强对Google云各种服务API的安全保护......
  • Nlog在windows运行正常,部署到Linux提示ystem.NullReferenceException: Object referen
    1.问题.net9webapplication,在Programe.cs文件中的NLog.LogManager.Configuration.Variables["configDir"]=env.ContentRootPath这句在Windows运行正常,部署到Ubuntu24.04就提示System.NullReferenceException:Objectreferencenotsettoaninstanceofanobject.......
  • QT 定义全局变量、通过函数初始化变量
    1.头文件中定义全局变量#ifndefZ3_GVARS_H#defineZ3_GVARS_H#include<QString> classZ3_GVARS{ public: staticQStringJSON_FILE_NAME; staticQStringSERVER_IP; staticintSERVER_PORT; staticvoidinitConfig();};#endif//!Z3_GVARS_H 2.在cpp......
  • 同优先级时间片运行
    目录设计原理设计实现优先级更高的任务具有更高的CPU使用权优先级相同的任务轮流占用CPU使用设计原理保证同一优先级任务之间公平占用CPU同一优先级任务间:指针不动,表头任务时间片用完后,取出表头插入表尾,循环轮转。设计实现构建一个允许多任务具备相同优先级,且同......
  • 【条件随机场的学习算法】模型的对数似然函数 公式解析
    本文是将文章【条件随机场的学习算法】中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。公式:L(w)......
  • 【条件随机场的学习算法】模型的对数似然函数L(w) 的展开形式 公式解析
    本文是将文章【条件随机场的学习算法】中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。公式:L(......
  • 注解:@FunctionalInterface函数式接口
    @FunctionalInterface是Java8引入的一个标记型注解,用于声明一个接口是函数式接口(FunctionalInterface)。函数式接口是指只有一个抽象方法的接口,这样的接口可以被用作Lambda表达式的类型。使用@FunctionalInterface注解有助于确保接口符合函数式接口的定义,并且在编译时......
  • SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来
    目录项目选型项目安装-本地运行起来软件安装:项目启动:总结&答疑项目选型软件开发,基本上都不会从0开始,一般都是在其他项目或者组件的基础上进行整合优化迭代,站在巨人肩膀上才能看得更远,其实这条规则也适用于任何行业。软件项目组件选型最好的地方就是公有git库,最出......
  • Python爬取数据插入mysql(简易记录)
    importmysql.connectorimportrequestsfromlxmlimporthtml#连接MySQL数据库db=mysql.connector.connect(host="?",user="?",password="?",database="?")cursor=db.cursor()company_url=......