Skip to content

Commit 553eee1

Browse files
committed
feat: ssr timing debugging
1 parent dc0af81 commit 553eee1

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

apps/frontend/src/middleware/project.global.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,20 @@ export default defineNuxtRouteMiddleware(async (to) => {
1818
const tags = useGeneratedState()
1919
const projectId = to.params.id as string
2020

21+
// SSR timing for debugging (will be sent to client)
22+
const ssrTiming = useState<{ projectV2?: number; parallelPrefetch?: number }>('ssr-timing', () => ({}))
23+
2124
try {
25+
const t0 = Date.now()
2226
const project = await queryClient.fetchQuery({
2327
queryKey: ['project', 'v2', projectId],
2428
queryFn: () => client.labrinth.projects_v2.get(projectId),
2529
staleTime: 1000 * 60 * 5,
2630
})
31+
if (import.meta.server) {
32+
ssrTiming.value.projectV2 = Date.now() - t0
33+
console.log(`[${projectId}] project-v2: ${ssrTiming.value.projectV2}ms`)
34+
}
2735

2836
// let page handle 404
2937
if (!project) return
@@ -40,6 +48,7 @@ export default defineNuxtRouteMiddleware(async (to) => {
4048

4149
// Prefetch core project data in parallel using the resolved ID
4250
// Versions and dependencies are lazy-loaded client-side for performance
51+
const t1 = Date.now()
4352
await Promise.all([
4453
queryClient.prefetchQuery({
4554
queryKey: ['project', 'v3', id],
@@ -59,6 +68,10 @@ export default defineNuxtRouteMiddleware(async (to) => {
5968
})
6069
: Promise.resolve(),
6170
])
71+
if (import.meta.server) {
72+
ssrTiming.value.parallelPrefetch = Date.now() - t1
73+
console.log(`[${projectId}] parallel-prefetch: ${ssrTiming.value.parallelPrefetch}ms`)
74+
}
6275

6376
// Determine the correct URL type
6477
const correctType = getProjectTypeForUrlShorthand(

apps/frontend/src/pages/[type]/[id].vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ import { useQuery } from '@tanstack/vue-query'
10131013
import { useLocalStorage } from '@vueuse/core'
10141014
import dayjs from 'dayjs'
10151015
import { Tooltip } from 'floating-vue'
1016-
import { useTemplateRef, watch } from 'vue'
1016+
import { onMounted, useTemplateRef, watch } from 'vue'
10171017
10181018
import { navigateTo } from '#app'
10191019
import Accordion from '~/components/ui/Accordion.vue'
@@ -1047,6 +1047,15 @@ const tags = useGeneratedState()
10471047
const flags = useFeatureFlags()
10481048
const cosmetics = useCosmetics()
10491049
1050+
const ssrTiming = useState('ssr-timing')
1051+
onMounted(() => {
1052+
if (ssrTiming.value?.projectV2 || ssrTiming.value?.parallelPrefetch) {
1053+
console.log(
1054+
`[SSR Timing] project-v2: ${ssrTiming.value.projectV2}ms, parallel-prefetch: ${ssrTiming.value.parallelPrefetch}ms, total: ${(ssrTiming.value.projectV2 ?? 0) + (ssrTiming.value.parallelPrefetch ?? 0)}ms`,
1055+
)
1056+
}
1057+
})
1058+
10501059
const { locale, formatMessage } = useVIntl()
10511060
10521061
const settingsModal = ref()

0 commit comments

Comments
 (0)