UNPKG

cmpstr

Version:

CmpStr is a lightweight, fast and well performing package for calculating string similarity

130 lines (129 loc) 4.76 kB
/** * Profiler Utility * src/utils/profiler.ts * * @see https://en.wikipedia.org/wiki/Profiling_(computer_programming) * * This class provides methods to run synchronous and asynchronous functions, capturing * their execution time and memory usage, and storing the results in a set of profiler * entries. It supports both Node.js and browser environments, detecting the environment * automatically. * * The class is optimized for minimal overhead and can be used for fine-grained * performance profiling. * * @module Utils/Profiler * @author Paul Köhler (komed3) * @license MIT */ import type { ProfilerEntry, ProfilerService } from './Types'; /** * Profiler class for measuring execution time and memory usage of functions. */ export declare class Profiler { private static ENV; private static instance; private store; private totalTime; private totalMem; private active; /** * Sets the environment based on the available global objects. * Detects if running in Node.js or browser and sets the ENV property accordingly. */ protected static detectEnv(): void; /** * Returns the singleton instance of the Perf class. * If the instance does not exist, it creates a new one. * * @param {boolean} [enable=false] - Optional parameter to enable the profiler upon instantiation * @returns {Profiler} - Singleton Profiler instance */ static getInstance(enable?: boolean): Profiler; /** * Private constructor to enforce singleton pattern. * Initializes the store for profiler entries. * * @param {boolean} [enable=false] - Optional parameter to enable the profiler */ private constructor(); /** * Gets the current time based on the environment. * * Uses process.hrtime.bigint() for Node.js, performance.now() for browsers, * and Date.now() as a fallback. * * @returns {number} - Current time in milliseconds */ private now; /** * Gets the current memory usage based on the environment. * * Uses process.memoryUsage().heapUsed for Node.js, performance.memory.usedJSHeapSize * for browsers, and returns 0 as a fallback. * * @returns {number} - Current memory usage in bytes */ private mem; /** * Enables the profiler. * Sets the active state to true, allowing profiling to occur. */ enable(): void; /** * Disables the profiler. * Sets the active state to false, preventing further profiling. */ disable(): void; /** * Resets the profiler by clearing the store, total time and memory consumption. * This method is useful for starting a new profiling session. */ clear(): void; /** * Runs a synchronous function and profiles its execution time and memory usage. * If the profiler is not active, it simply executes the function without profiling. * * @param {() => T} fn - Function to be executed and profiled * @param {Record<string, any>} meta - Metadata to be associated with the profiling entry * @returns {T} - The result of the executed function */ run<T>(fn: () => T, meta?: Record<string, any>): T; /** * Runs an asynchronous function and profiles its execution time and memory usage. * If the profiler is not active, it simply executes the function without profiling. * * @param {() => Promise<T>} fn - Asynchronous function to be executed and profiled * @param {Record<string, any>} meta - Metadata to be associated with the profiling entry * @returns {Promise<T>} - A promise that resolves to the result of the executed function */ runAsync<T>(fn: () => Promise<T>, meta?: Record<string, any>): Promise<T>; /** * Retrieves all profiler entries stored in the profiler. * * @returns {ProfilerEntry<any>[]} - An array of profiler entries */ getAll(): ProfilerEntry<any>[]; /** * Retrieves the last profiler entry stored in the profiler. * * @returns {ProfilerEntry<any> | undefined} - The last profiler entry or undefined if no entries exist */ getLast(): ProfilerEntry<any> | undefined; /** * Retrieves the total time and memory consumption recorded by the profiler. * * @returns {{ time: number, mem: number }} - An object containing total time and memory usage */ getTotal(): { time: number; mem: number; }; /** * Returns the services provided by the Profiler class. * This allows for easy access to the profiler's methods. * * @returns {ProfilerService<any>} - An object containing methods to control the profiler */ services: ProfilerService<any>; }