lag-monitor
Version:
A lightweight utility for monitoring JavaScript event loop lag in real-time
79 lines (78 loc) • 2.3 kB
TypeScript
/**
* Supported lag measurement types
*/
export type LagType = "setTimeout" | "setInterval" | "requestAnimationFrame";
/**
* Lag measurement data
*/
export interface LagData {
/** Most recent lag measurement in milliseconds */
latest?: number;
/** Average lag over the sample window in milliseconds */
average?: number;
/** Minimum lag in the current sample window */
min?: number;
/** Maximum lag in the current sample window */
max?: number;
/** Number of samples collected */
samples?: number;
}
/**
* Callback function called on each lag measurement
*/
export type LagCallback = (currentLag: number, lagData: LagData) => void;
/**
* Configuration options for lag monitoring
*/
export interface LagMonitorOptions {
/** Method used for scheduling measurements */
lagType?: LagType;
/** Interval between measurements in milliseconds */
sampleRate?: number;
/** Number of samples to keep for average calculation */
sampleCount?: number;
/** Optional callback invoked on each measurement */
callback?: LagCallback;
/** Whether to start monitoring immediately */
autoStart?: boolean;
/** Custom metrics to include in snapshots */
metrics?: Record<string, () => number>;
/** User-defined metrics to compute from lag samples */
userMetrics?: Record<string, (samples: number[]) => number>;
}
declare class LagMonitor {
private lagSamples;
private isActive;
private options;
private timerId;
private lastTimestamp;
private userMetrics;
constructor(options?: LagMonitorOptions);
get latest(): number;
get average(): number;
get min(): number;
get max(): number;
private scheduleNext;
private tick;
private clearTimer;
/**
* Get a metric value by name - handles both built-in and user-defined metrics
*/
private getMetricValue;
/**
* Get all available metric functions (built-in + user-defined)
*/
getAvailableMetrics(): string[];
/**
* Compute a specific metric or all metrics
*/
snapshot(metric?: string): LagData | {
[key: string]: number;
};
start(): void;
stop(): void;
reset(): void;
restart(): void;
isRunning(): boolean;
}
export default LagMonitor;