Skip to content

Commit 80d2fd6

Browse files
committed
perf: tweak server function caching
1 parent 326323b commit 80d2fd6

9 files changed

Lines changed: 17 additions & 37 deletions

File tree

server/api/jsr/[...pkg].get.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export default defineCachedEventHandler<Promise<JsrPackageInfo>>(
2020
},
2121
{
2222
maxAge: 60 * 60, // 1 hour
23+
swr: true,
2324
name: 'api-jsr-package',
2425
getKey: event => getRouterParam(event, 'pkg') ?? '',
2526
},

server/api/registry/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export default defineCachedEventHandler(
1818
}
1919
},
2020
{
21-
maxAge: 60 * 5,
21+
maxAge: 60 * 60, // 1 hour
22+
swr: true,
2223
getKey: event => getRouterParam(event, 'pkg') ?? '',
2324
},
2425
)

server/api/registry/file/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export default defineCachedEventHandler(
175175
}
176176
},
177177
{
178-
maxAge: 60 * 60, // Cache for 1 hour (files don't change for a given version)
178+
// File content for a specific version never changes - cache permanently
179+
maxAge: 60 * 60 * 24 * 365, // 1 year
179180
getKey: event => {
180181
const pkg = getRouterParam(event, 'pkg') ?? ''
181182
return `file:v${CACHE_VERSION}:${pkg}`

server/api/registry/files/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ export default defineCachedEventHandler(
4747
}
4848
},
4949
{
50-
maxAge: 60 * 60, // Cache for 1 hour (files don't change for a given version)
50+
// Files for a specific version never change - cache permanently
51+
maxAge: 60 * 60 * 24 * 365, // 1 year
5152
getKey: event => {
5253
const pkg = getRouterParam(event, 'pkg') ?? ''
5354
return `files:${pkg}`

server/api/registry/install-size/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ export default defineCachedEventHandler(
6666
}
6767
},
6868
{
69-
maxAge: 60 * 60, // Cache for 1 hour
69+
maxAge: 60 * 60, // 1 hour
70+
swr: true,
7071
getKey: event => getRouterParam(event, 'pkg') ?? '',
7172
},
7273
)

server/api/registry/readme/[...pkg].get.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ export default defineCachedEventHandler(
9898
}
9999
},
100100
{
101-
maxAge: 60 * 10,
101+
maxAge: 60 * 60, // 1 hour
102+
swr: true,
102103
getKey: event => {
103104
const pkg = getRouterParam(event, 'pkg') ?? ''
104105
return `readme:${pkg}`

server/utils/install-size.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ const fetchPackument = defineCachedFunction(
5050
},
5151
{
5252
maxAge: 60 * 60, // 1 hour
53+
swr: true,
5354
name: 'packument',
5455
getKey: (name: string) => name,
5556
},
@@ -263,6 +264,7 @@ export const calculateInstallSize = defineCachedFunction(
263264
{
264265
// Cache for 1 hour - dependency resolutions can change with new releases
265266
maxAge: 60 * 60,
267+
swr: true,
266268
name: 'install-size',
267269
getKey: (name: string, version: string) => `${name}@${version}`,
268270
},

server/utils/jsr.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ export const fetchJsrPackageInfo = defineCachedFunction(
5858
}
5959
},
6060
{
61-
// Cache for 1 hour - JSR info doesn't change often
62-
maxAge: 60 * 60,
61+
maxAge: 60 * 60 * 24, // 1 day
62+
swr: true,
6363
name: 'jsr-package-info',
6464
getKey: (name: string) => name,
6565
},

server/utils/npm.ts

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import type { Packument, NpmSearchResponse, NpmDownloadCount } from '#shared/types'
1+
import type { Packument } from '#shared/types'
22
import { maxSatisfying, prerelease } from 'semver'
33

44
const NPM_REGISTRY = 'https://registry.npmjs.org'
5-
const NPM_API = 'https://api.npmjs.org'
65

76
function encodePackageName(name: string): string {
87
if (name.startsWith('@')) {
@@ -18,39 +17,12 @@ export const fetchNpmPackage = defineCachedFunction(
1817
},
1918
{
2019
maxAge: 60 * 5,
20+
swr: true,
2121
name: 'npm-package',
2222
getKey: (name: string) => name,
2323
},
2424
)
2525

26-
export const fetchNpmSearch = defineCachedFunction(
27-
async (query: string, size: number = 20, from: number = 0): Promise<NpmSearchResponse> => {
28-
const params = new URLSearchParams({
29-
text: query,
30-
size: String(size),
31-
from: String(from),
32-
})
33-
return await $fetch<NpmSearchResponse>(`${NPM_REGISTRY}/-/v1/search?${params.toString()}`)
34-
},
35-
{
36-
maxAge: 60 * 2,
37-
name: 'npm-search',
38-
getKey: (query: string, size: number, from: number) => `${query}:${size}:${from}`,
39-
},
40-
)
41-
42-
export const fetchNpmDownloads = defineCachedFunction(
43-
async (name: string, period: string = 'last-week'): Promise<NpmDownloadCount> => {
44-
const encodedName = encodePackageName(name)
45-
return await $fetch<NpmDownloadCount>(`${NPM_API}/downloads/point/${period}/${encodedName}`)
46-
},
47-
{
48-
maxAge: 60 * 60,
49-
name: 'npm-downloads',
50-
getKey: (name: string, period: string) => `${name}:${period}`,
51-
},
52-
)
53-
5426
/**
5527
* Check if a version constraint explicitly includes a prerelease tag.
5628
* e.g., "^1.0.0-alpha" or ">=2.0.0-beta.1" include prereleases

0 commit comments

Comments
 (0)