优化 modelCurve 接口的调用时机,加上缓存,减少调用频率
This commit is contained in:
@@ -68,6 +68,8 @@ import { bandToPeqFilter, buildPeqCatalogSyncKey, cloneBands, getUniquePresetNam
|
||||
import type { BandParamKind, PeqCatalogItem, PeqEqUi, PeqPresetLocalCache } from "./eq/types";
|
||||
|
||||
/* ── Main Component ── */
|
||||
const rawCurveCache = new Map<string, number[] | null>();
|
||||
|
||||
export default function EQPage() {
|
||||
const [, setLocation] = useLocation();
|
||||
const {
|
||||
@@ -158,6 +160,7 @@ export default function EQPage() {
|
||||
const [isConfirmingTarget, setIsConfirmingTarget] = useState(false);
|
||||
const [currentRawCurve, setCurrentRawCurve] = useState<number[] | null>(null);
|
||||
const [rawCurveLoading, setRawCurveLoading] = useState(false);
|
||||
const rawCurveCacheRef = useRef(rawCurveCache);
|
||||
const allowPeqRemoteSyncRef = useRef(false);
|
||||
const lastPeqCatalogSyncKeyRef = useRef("");
|
||||
const syncingHeadphoneRef = useRef(false);
|
||||
@@ -828,6 +831,17 @@ export default function EQPage() {
|
||||
const model = peq?.model?.trim() ?? "";
|
||||
if (!brand || !model) return null;
|
||||
|
||||
const cacheKey = `${brand}|${model}`;
|
||||
if (rawCurveCacheRef.current.has(cacheKey)) {
|
||||
const cached = rawCurveCacheRef.current.get(cacheKey);
|
||||
if (cached) {
|
||||
console.log("[modelCurve] cache hit", { brand, model, rawLength: cached.length });
|
||||
} else {
|
||||
console.log("[modelCurve] cache hit (no raw)", { brand, model });
|
||||
}
|
||||
return cached ?? null;
|
||||
}
|
||||
|
||||
const modelCurve = await getModelCurve(brand, model);
|
||||
if (modelCurve && typeof modelCurve === "object") {
|
||||
const payload = modelCurve as {
|
||||
@@ -853,6 +867,7 @@ export default function EQPage() {
|
||||
})
|
||||
: null;
|
||||
const cleanedRaw = raw && raw.every((v) => Number.isFinite(v)) ? (raw as number[]) : null;
|
||||
rawCurveCacheRef.current.set(cacheKey, cleanedRaw);
|
||||
console.log("[modelCurve] raw check", {
|
||||
brand,
|
||||
model,
|
||||
|
||||
Reference in New Issue
Block a user