在Nuxt.js SSR应用中,数据库连接优化是提升首屏加载性能的关键环节。本文将分享一个实际项目中的优化方案。
问题背景:我们的Nuxt应用在生产环境中遇到SSR请求超时问题,通过分析发现主要瓶颈在于数据库连接池配置不当。
核心优化方案:
- 连接池配置调整:在
nuxt.config.js中添加数据库中间件
export default {
serverMiddleware: [
{ path: '/api', handler: require('express')().use(require('cors')()) },
],
modules: [
['@nuxtjs/axios', { baseURL: process.env.API_URL }]
]
}
- 服务端连接复用:创建全局数据库连接池
// plugins/database.js
import mysql from 'mysql2/promise'
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
connectionLimit: 10,
queueLimit: 0,
acquireTimeout: 60000,
timeout: 60000
})
export default ({ app }, inject) => {
inject('db', pool)
}
- 异步数据预取优化:在页面组件中使用
asyncData
export default {
async asyncData({ app, params }) {
const [data] = await app.$db.execute(
'SELECT * FROM products WHERE id = ?',
[params.id]
)
return { data }
}
}
性能对比:优化后,SSR响应时间从平均800ms降至250ms,数据库连接超时问题完全解决。
通过以上配置,我们实现了数据库连接的高效利用,有效提升了Nuxt.js SSR应用的整体性能。

讨论