Nextjsはlibの中にrenderToStringが入っていて純粋にrenderToStringのみの計測ができなそうなので、以下のような感じで妥協するしかなさそう。
const serverTiming = require('server-timing')
const ssrTiming = async ({ req, res, pagePath, queryParams }) => {
res.startTime('ssr', 'SSR')
const html = await app.renderToHTML(req, res, pagePath, queryParams)
res.endTime('ssr')
res.send(html)
}
app.prepare()
.then(() => {
const server = express()
server.use(serverTiming())
// SSRの時間を計測したいパス
server.get('/', (req, res) => {
return ssrTiming({ req, res, pagePath: '/' }))
}
server.get('*', (req, res) => {
return handle(req, res)
})
server.listen(port, (err) => {
if (err) throw err
console.log('> Ready on http://localhost:' + port)
})
})
.catch((ex) => {
console.error(ex.stack)
process.exit(1)
})