함수 실행 시간
서버리스 함수 실행 시간을 늘리는 패턴을 감지하는 규칙.
이 규칙들은 서버리스 함수의 실제 실행 시간을 늘리는 패턴을 포착합니다. 실행 시간이 짧을수록 비용이 낮아집니다 — Vercel은 실행 시간당 GB-초로 청구합니다.
async-parallel
Warning ·
vercel-doctor/async-parallel서로 독립적으로 보이는 3개 이상의 순차적 await 문을 감지합니다 — 나중의 await가 이전 것의 변수를 참조하지 않는 경우입니다.
이유: 순차적 await는 하나씩 실행됩니다. 서로 독립적이라면 Promise.all()로 병렬 실행하면 함수 실행 시간을 크게 줄일 수 있습니다.
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
Warning ·
vercel-doctor/server-after-nonblocking서버 액션("use server"가 있는 파일)에서 console.log(), console.info(), console.warn(), analytics.track(), analytics.identify(), 또는 analytics.page() 호출을 감지합니다.
이유: 로깅과 분석 호출은 완료될 때까지 응답을 차단합니다. after()로 감싸면 응답이 즉시 완료되는 동안 작업은 백그라운드에서 계속됩니다.
"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
Warning ·
vercel-doctor/vercel-edge-sequential-awaitPromise.all 없이 2개 이상의 순차적 await 호출이 있는 Edge 런타임 파일을 감지합니다.
이유: Edge 함수에는 엄격한 실행 시간 제한이 있습니다. 순차적 I/O는 병렬화할 수 있는 소중한 밀리초를 낭비합니다.
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 });
}Edit on GitHub
Last updated on