Function analyzeTimeDurations

  • Analyzes an array of measured time durations and returns useful statistics both for the full dataset and for outlier-filtered data.

    This is intended for benchmarking or performance-profiling scenarios where you collect many individual operation durations (e.g., using performance.now()).

    What each metric means

    • count: Number of measured durations.
    • durations: Sorted list of all input durations (ascending).
    • filtered: Sorted list of durations excluding statistical outliers using the IQR rule.
    • filteredCount: Number of durations remaining after outlier removal.

    For both full and filtered stats:

    • min: The shortest measured duration.
    • max: The longest measured duration.
    • mean: The arithmetic average time.
    • median: The middle value when sorted (50th percentile). More stable than mean.
    • std: Standard deviation. Measures how much the durations vary.
    • p95: 95th percentile. 95% of values are below this value. Useful as a near-worst-case indicator.
    • q1: 25th percentile (lower quartile).
    • q3: 75th percentile (upper quartile).
    • iqr: Interquartile range (Q3 − Q1). Measures the spread of the middle 50% of values.

    Outlier filtering (IQR rule)

    Outliers are removed if they fall outside: [Q1 − 1.5×IQR, Q3 + 1.5×IQR]

    This avoids skewing results when a single operation takes unusually long.

    How to collect durations

    const durations: number[] = [];
    for (let i = 0; i < iterations; i++) {
    const start = performance.now();
    await doWork();
    durations.push(performance.now() - start);
    }

    Important:

    • Do NOT use Date.now(); it has only millisecond resolution.
    • Pre-warm your code (JIT, caches, I/O) before measuring.
    • Run many iterations (100–10 000) to get stable stats.
    • Avoid logging inside the measured code; it distorts timing.

    Returns

    An object containing sorted durations, filtered durations, and statistics for both full and filtered datasets.

    Throws

    If the input array is empty.

    Parameters

    • durations: number[]

      An array of time durations in milliseconds. Must contain at least one value.

    Returns {
        count: number;
        durations: number[];
        filtered: number[];
        filteredCount: number;
        filteredStats: {
            iqr: number;
            max: number;
            mean: number;
            median: number;
            min: number;
            p95: number;
            q1: number;
            q3: number;
            std: number;
        };
        fullStats: {
            iqr: number;
            max: number;
            mean: number;
            median: number;
            min: number;
            p95: number;
            q1: number;
            q3: number;
            std: number;
        };
    }

    • count: number
    • durations: number[]
    • filtered: number[]
    • filteredCount: number
    • filteredStats: {
          iqr: number;
          max: number;
          mean: number;
          median: number;
          min: number;
          p95: number;
          q1: number;
          q3: number;
          std: number;
      }
      • iqr: number
      • max: number
      • mean: number
      • median: number
      • min: number
      • p95: number
      • q1: number
      • q3: number
      • std: number
    • fullStats: {
          iqr: number;
          max: number;
          mean: number;
          median: number;
          min: number;
          p95: number;
          q1: number;
          q3: number;
          std: number;
      }
      • iqr: number
      • max: number
      • mean: number
      • median: number
      • min: number
      • p95: number
      • q1: number
      • q3: number
      • std: number

Generated using TypeDoc