优化 modelCurve 接口的调用时机,加上缓存,减少调用频率

This commit is contained in:
eafonyang
2026-06-10 17:52:36 +08:00
parent 3c411b3df0
commit 2d13bc3d8f
+15
View File
@@ -520,6 +520,8 @@ function FreqChart({
/* ── Main Component ── */
const rawCurveCache = new Map<string, number[] | null>();
export default function EQPage() {
const [, setLocation] = useLocation();
const {
@@ -610,6 +612,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);
@@ -1219,6 +1222,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 {
@@ -1244,6 +1258,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,