Overview
The generateSlaveIds function in parameter-generator.ts currently uses Array.includes() for validation checks, which is O(n) complexity. This can be optimized to O(1) using a Set.
Current Implementation
function* generateSlaveIds(
range: readonly [number, number],
defaultAddress?: number,
filter?: number[]
): Generator<number> {
// ...
let idsToYield: number[]
if (filter !== undefined) {
idsToYield = filter // Array
} else {
// Creates 247-element array
idsToYield = Array.from({ length: end - start + 1 }, (_, i) => start + i)
}
function* yieldIfValid(id: number): Generator<number> {
if (idsToYield.includes(clamped) && !yielded.has(clamped)) { // O(n) lookup
// ...
}
}
// Called 3 times for priority IDs
yield* yieldIfValid(defaultAddress)
yield* yieldIfValid(1)
yield* yieldIfValid(2)
}
Performance Impact
- Current: Up to 3 × 247 = 741 array iterations for priority checks
- Optimized: 3 × O(1) = 3 Set lookups
Benefits
- ✅ O(1) validation instead of O(n)
- ✅ No 247-element array allocation in full range case
- ✅ Filtered case: O(k) where k = filter size
Reality Check
- Current bottleneck is Modbus I/O (1000ms+ per test)
- This optimization saves microseconds of CPU time
- Priority: Low - nice to have but not critical
Related
Overview
The
generateSlaveIdsfunction inparameter-generator.tscurrently usesArray.includes()for validation checks, which is O(n) complexity. This can be optimized to O(1) using a Set.Current Implementation
Performance Impact
Benefits
Reality Check
Related