const parseEnvInt = ( value: string | undefined, fallback: number, min: number, max: number ) => { if (!value) return fallback const parsed = Number.parseInt(value, 10) if (!Number.isFinite(parsed)) return fallback return Math.min(max, Math.max(min, parsed)) } export const labelimagePerformanceConfig = { // 单次渲染的路径切片大小。越小越丝滑,越大越快完成。 polygonRenderBatchSize: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_POLYGON_BATCH_SIZE, 12, 1, 200 ), // 每帧渲染预算(毫秒)。越小越不卡操作,越大越快完成绘制。 polygonRenderBatchBudgetMs: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_POLYGON_BATCH_BUDGET_MS, 6, 1, 33 ), // 切帧准备超过该阈值后才显示轻量提示,避免短切换频繁闪动提示。 frameSwitchLoadingDelayMs: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_FRAME_SWITCH_LOADING_DELAY_MS, 120, 0, 1000 ), // 切帧时新旧图层的交叉淡入时长(毫秒)。设为 0 可关闭淡入。 rasterCrossfadeDurationMs: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_RASTER_CROSSFADE_MS, 90, 0, 400 ), // 容器尺寸连续变化时,延迟提交 canvas 实际宽高,减少频繁重置导致的白闪。 resizeCommitDebounceMs: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_RESIZE_COMMIT_DEBOUNCE_MS, 90, 0, 500 ), // 容器尺寸变更后的视觉缓动时长(毫秒),用于降低“跳变感”。 resizeInterpolationDurationMs: parseEnvInt( process.env.NEXT_PUBLIC_LABELIMAGE_RESIZE_INTERPOLATION_MS, 100, 0, 400 ), } as const