性能优化指南

在本指南中,我们将介绍一些优化应用程序的方法,以提升 Better Auth 应用的性能表现。

缓存

缓存是一种强大的技术,可以通过减少数据库查询次数和加快响应时间,显著提升 Better Auth 应用的性能。

每次调用 useSessiongetSession 时都查询数据库并不是理想的做法,尤其是在会话不频繁变更的情况下。Cookie 缓存通过将会话数据存储在一个短期的、经过签名的 Cookie 中来解决这个问题,类似于 JWT 访问令牌与刷新令牌配合使用的方式。

要启用 Cookie 缓存,只需在您的认证配置中设置 session.cookieCache

auth.ts
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 的潜力至关重要。

推荐索引字段

表名字段插件
usersemail
accountsuserId
sessionsuserId, token
verificationsidentifier
invitationsemail, organizationIdorganization
membersuserId, organizationIdorganization
organizationsslugorganization
passkeyuserIdpasskey
twoFactorsecrettwoFactor

我们计划在未来为模式生成工具添加索引支持。

On this page