性能优化指南
在本指南中,我们将介绍一些优化应用程序的方法,以提升 Better Auth 应用的性能表现。
缓存
缓存是一种强大的技术,可以通过减少数据库查询次数和加快响应时间,显著提升 Better Auth 应用的性能。
Cookie 缓存
每次调用 useSession
或 getSession
时都查询数据库并不是理想的做法,尤其是在会话不频繁变更的情况下。Cookie 缓存通过将会话数据存储在一个短期的、经过签名的 Cookie 中来解决这个问题,类似于 JWT 访问令牌与刷新令牌配合使用的方式。
要启用 Cookie 缓存,只需在您的认证配置中设置 session.cookieCache
:
import { betterAuth } from "better-auth";
export const auth = betterAuth({
session: {
cookieCache: {
enabled: true,
maxAge: 5 * 60, // 缓存持续时间,单位为秒
},
},
});
了解更多关于 Cookie 缓存 的信息。
框架缓存
以下是在不同框架和环境中实现缓存的示例:
自 Next v15 起,我们可以使用 "use cache"
指令来缓存服务器函数的响应。
export async function getUsers() {
'use cache'
const { users } = await auth.api.listUsers();
return users
}
了解更多关于 NextJS use cache 指令的信息,请点击此处。
在 Remix 中,你可以在 loader
函数中使用 cache
选项来缓存服务器响应。以下是一个示例:
import { json } from '@remix-run/node';
export const loader = async () => {
const { users } = await auth.api.listUsers();
return json(users, {
headers: {
'Cache-Control': 'max-age=3600', // 缓存 1 小时
},
});
};
你可以阅读关于 Remix 中 Loader 与路由缓存头部的详细指南此处。
在 SolidStart 中,你可以使用 query
函数来缓存数据。以下是一个示例:
const getUsers = query(
async () => (await auth.api.listUsers()).users,
"getUsers"
);
了解更多关于 SolidStart query
函数的信息,请点击此处。
使用 React Query,你可以通过 useQuery
钩子来缓存数据。以下是一个示例:
import { useQuery } from '@tanstack/react-query';
const fetchUsers = async () => {
const { users } = await auth.api.listUsers();
return users;
};
export default function Users() {
const { data: users, isLoading } = useQuery('users', fetchUsers, {
staleTime: 1000 * 60 * 15, // 缓存 15 分钟
});
if (isLoading) return <div>加载中...</div>;
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
了解更多关于 React Query use cache 指令的信息,请点击此处。
SSR 优化
如果您使用的框架支持服务端渲染(SSR),通常最佳做法是在服务器上预获取用户会话,并将其作为客户端的回退方案。
const session = await auth.api.getSession({
headers: await headers(),
});
// 然后将会话传递给客户端
数据库优化
优化数据库性能对于充分发挥 Better Auth 的潜力至关重要。
推荐索引字段
表名 | 字段 | 插件 |
---|---|---|
users | email | |
accounts | userId | |
sessions | userId , token | |
verifications | identifier | |
invitations | email , organizationId | organization |
members | userId , organizationId | organization |
organizations | slug | organization |
passkey | userId | passkey |
twoFactor | secret | twoFactor |
我们计划在未来为模式生成工具添加索引支持。