feat(logs): optimize fetchCompleteHomeLogs for improved pagination and performance

This commit is contained in:
hkfires
2026-06-15 07:53:29 +08:00
Unverified
parent 28ce5be3a6
commit 729df08eca
+26 -29
View File
@@ -173,39 +173,36 @@ const fetchCompleteHomeLogs = async (
return firstPage;
}
let nextOffset = firstOffset + records.length;
const targetCount = Math.min(requestedLimit, Math.max(total - firstOffset, 0));
while (records.length < targetCount && nextOffset < total) {
const remaining = targetCount - records.length;
const data = await apiClient.get('/logs', {
params: {
...params,
limit: Math.min(pageLimit, remaining),
offset: nextOffset,
},
timeout: LOGS_TIMEOUT_MS,
});
if (!isRecord(data) || !Array.isArray(data.logs)) {
break;
}
const pageRecords = homeRecordsFromPayload(data);
if (pageRecords.length === 0) {
break;
}
records.push(...pageRecords);
nextOffset += pageRecords.length;
if (records.length >= targetCount) {
return { ...firstPage, logs: records, limit: records.length, offset: firstOffset };
}
return {
...firstPage,
logs: records,
limit: records.length,
offset: firstOffset,
};
const remaining = targetCount - records.length;
const baseOffset = firstOffset + records.length;
const pageRequests: Array<{ offset: number; limit: number }> = [];
let collected = 0;
while (collected < remaining && baseOffset + collected < total) {
const pageSize = Math.min(pageLimit, remaining - collected);
pageRequests.push({ offset: baseOffset + collected, limit: pageSize });
collected += pageSize;
}
const pages = await Promise.all(
pageRequests.map(async ({ offset, limit }) => {
const data = await apiClient.get('/logs', {
params: { ...params, limit, offset },
timeout: LOGS_TIMEOUT_MS,
});
if (!isRecord(data) || !Array.isArray(data.logs)) return [];
return homeRecordsFromPayload(data);
})
);
pages.forEach((pageRecords) => records.push(...pageRecords));
return { ...firstPage, logs: records, limit: records.length, offset: firstOffset };
};
export const logsApi = {