يا شباب أنا بكتب API بيجلب قائمة المنشورات (Posts) وكل منشور معاه التعليقات بتاعته (Comments) عشان أعرضهم في الـ Feed.
المطلوب:
جلب آخر 20 منشور مع اسم الكاتب وقائمة التعليقات لكل منشور وترجيعهم في الاستجابة.
المشكلة اللي مقابلاني:
الـ API شغال وبيجيب البيانات صح، بس بياخد وقت طويل جداً (أكتر من 3-4 ثواني) لما البيانات بتزيد!
لما فتحت الـ Database Logs لقيت إن الكود بيعمل مئات الاستعلامات (Queries) لقاعدة البيانات في الطلب الواحد بدلاً من استعلام واحد أو اتنين!
الكود البرمجي (المشكلة) :
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function getFeed() {
// 1. استعلام يجلب المنشورات (1 Query)
const posts = await prisma.post.findMany({
take: 20,
});
// السطر المشتبه فيه: Loop بتعمل Query لكل عنصر في القائمة!
const postsWithComments = await Promise.all(
posts.map(async (post) => {
const comments = await prisma.comment.findMany({
where: { postId: post.id } // N Queries!
});
return { ...post, comments };
})
);
return postsWithComments;
}
التعليقات (1)
سجّل دخولك لإضافة تعليق
تسجيل الدخول