الإجابة المختصرة
يولّد Prisma عميل TypeScript مخصصًا من ملف schema.prisma ويترجم استدعاءاتك إلى SQL. كان التنفيذ يتم عبر محرك ثنائي مكتوب بـ Rust، أما الإصدارات الحديثة (متاحة منذ 6.16 وهي الأساس في Prisma 7) فتستخدم Query Compiler مكتوبًا بـ TypeScript مع driver adapters بدون محرك Rust.
الشرح
يولّد Prisma عميلًا مخصصًا بالأنواع بناءً على schema.prisma. عند استدعاء prisma.user.findMany() يبني العميل خطة الاستعلام ثم تُنفَّذ عبر محرك الاستعلام. في المعمارية القديمة كان هذا المحرك ملفًا ثنائيًا بلغة Rust يعمل بجانب التطبيق، مما زاد حجم الحزمة وعقّد النشر على بيئات Serverless و Edge. المعمارية الحديثة (Rust-free) تستبدله بـ Query Compiler يترجم الاستعلامات إلى SQL داخل بيئة TypeScript وتتصل بقاعدة البيانات عبر driver adapter (مثل pg)، فتصغر الحزمة ويبدأ التشغيل أسرع. وفي الحالتين يقلل include و select كثيرًا من مشاكل N+1 عند تحميل العلاقات الشائعة.
مثال بالكود
const users = await prisma.user.findMany({
where: { active: true },
include: { posts: true }
});أخطاء شائعة
- إنشاء نُسخ متعددة من PrismaClient في كل ملف أو دالة بدلاً من مشاركة نسخة Singleton واحدة.