Duração de Funções
Regras que detectam padrões que aumentam o tempo de execução de funções serverless.
Essas regras capturam padrões que inflam o tempo de execução das suas funções serverless. Funções mais curtas significam contas menores — a Vercel cobra por GB-segundo de tempo de execução.
async-parallel
vercel-doctor/async-parallelDetecta 3 ou mais instruções await sequenciais que parecem independentes — ou seja, awaits posteriores não referenciam variáveis de awaits anteriores.
Por que importa: Awaits sequenciais executam um após o outro. Se forem independentes, executá-los em paralelo com Promise.all() pode reduzir significativamente a duração da função.
const users = await db.user.findMany();
const posts = await db.post.findMany();
const comments = await db.comment.findMany();const [users, posts, comments] = await Promise.all([
db.user.findMany(),
db.post.findMany(),
db.comment.findMany(),
]);server-after-nonblocking
vercel-doctor/server-after-nonblockingDetecta chamadas console.log(), console.info(), console.warn(), analytics.track(), analytics.identify() ou analytics.page() em server actions (arquivos com "use server").
Por que importa: Chamadas de logging e analytics bloqueiam a resposta até serem concluídas. Envolvê-las em after() permite que a resposta termine imediatamente enquanto o trabalho continua em segundo plano.
"use server";
export const updateUser = async (data: FormData) => {
await db.user.update({ ... });
console.log("User updated");
analytics.track("user_updated");
};"use server";
import { after } from "next/server";
export const updateUser = async (data: FormData) => {
await db.user.update({ ... });
after(() => {
console.log("User updated");
analytics.track("user_updated");
});
};vercel-edge-sequential-await
vercel-doctor/vercel-edge-sequential-awaitDetecta arquivos com runtime edge que possuem 2 ou mais chamadas await sequenciais sem Promise.all.
Por que importa: Funções edge têm limites rigorosos de tempo de execução. I/O sequencial desperdiça milissegundos preciosos que poderiam ser paralelizados.
export const runtime = "edge";
export async function GET() {
const user = await getUser();
const settings = await getSettings();
return Response.json({ user, settings });
}export const runtime = "edge";
export async function GET() {
const [user, settings] = await Promise.all([getUser(), getSettings()]);
return Response.json({ user, settings });
}Last updated on