Performance: cache panoramax requests more aggressively; reuse license information that comes from the search-api; lower picture limit; should relieve #2384 greatly

This commit is contained in:
Pieter Vander Vennet 2025-04-22 02:53:31 +02:00
parent bd287fd8b0
commit 549129671a
7 changed files with 53 additions and 45 deletions

View file

@ -24,7 +24,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
public defaultKeyPrefixes: string[] = ["panoramax"]
public readonly name: string = "panoramax"
private static knownMeta: Record<string, { data: ImageData; time: Date }> = {}
private static knownMeta: Record<string, { data: Promise<{ data: ImageData, url: string }>; time: Date }> = {}
public SourceIcon(
img?: { id: string; url: string },
@ -45,8 +45,8 @@ export default class PanoramaxImageProvider extends ImageProvider {
)
}
public addKnownMeta(meta: ImageData) {
PanoramaxImageProvider.knownMeta[meta.id] = { data: meta, time: new Date() }
public addKnownMeta(meta: ImageData, url?: string) {
PanoramaxImageProvider.knownMeta[meta.id] = { data: Promise.resolve({ data: meta, url }), time: new Date() }
}
/**
@ -102,16 +102,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
}
}
private async getInfoFor(id: string): Promise<{ data: ImageData; url: string }> {
if (!id.match(/^[a-zA-Z0-9-]+$/)) {
return undefined
}
const cached = PanoramaxImageProvider.knownMeta[id]
if (cached) {
if (new Date().getTime() - cached.time.getTime() < 1000) {
return { data: cached.data, url: undefined }
}
}
private async getInfoForUncached(id: string) {
try {
return await this.getInfoFromMapComplete(id)
} catch (e) {
@ -125,6 +116,25 @@ export default class PanoramaxImageProvider extends ImageProvider {
return undefined
}
private async getInfoFor(id: string): Promise<{ data: ImageData; url: string }> {
if (!id.match(/^[a-zA-Z0-9-]+$/)) {
return undefined
}
const cached = PanoramaxImageProvider.knownMeta[id]
if (cached) {
if (new Date().getTime() - cached.time.getTime() < 5000) {
return await cached.data
}
}
const promise: Promise<{ data: ImageData; url: string }> = this.getInfoForUncached(id)
PanoramaxImageProvider.knownMeta[id] = {
time: new Date(),
data: promise
}
return await promise
}
public async ExtractUrls(key: string, value: string): Promise<ProvidedImage[]> {
if (!Panoramax.isId(value)) {
return undefined
@ -139,7 +149,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
getRelevantUrls(tags: Record<string, string>, prefixes: string[]): Store<ProvidedImage[]> {
const source = UIEventSource.FromPromise(super.getRelevantUrlsFor(tags, prefixes))
console.trace("Getting relevant URLS for panoramax yielded", source.data)
function hasLoading(data: ProvidedImage[]) {
if (data === undefined) {
return true