Postda o'zim eng asosiylari deb bilgan 5 ta ORM'ni taqqoslamoqchiman: Prisma, TypeORM, Sequalize, Drizzle va Objection.js. Kyselyni ham qo'shmoqchi edim, lekin u shunchaki query builder bo'lgani uchun uni qo'shmaslikka qaror qildim, lekin u ham yaxshi tool. Quyida turli kategoriyalar bo'yicha o'z fikrlarim bilan bo'lishaman.

Querying

  • Prisma - ✅✅ a'lo darajada! O'zi client library generate qilib beradi va shuni metodlarini ishlatasiz. Query builder yo'q ☹️
  • TypeORM - ✅ yaxshi, o'zini model metodlarini ishlatasiz. Query builder bor lekin unchalik ham zo'r deb bo'lmaydi, shaxsan meni asabimni o'ynaydi
  • Sequelize - ✅ yaxshi, o'zini model metodlarini ishlatasiz. Query builder yo'q ☹️
  • Drizzle - ✅✅ a'lo darajada! Query builder ham bo'r! (batteries included dermidi😄)
  • Objection.js - ✅ yaxshi, chunki u Knex.js!

Type Safety

  • Prisma - ✅✅ a'lo darajada!
  • TypeORM - ✅ yaxshi va asosan o'zizga bog'liq :)
  • Sequelize - ❌ by default support yo'q, bir amallasa bo'ladi
  • Drizzle - ✅✅ a'lo darajada!
  • Objection.js - ⚠️ bor, lekin zo'r emas ☹️

Schema definition

  • Prisma - o'zini .prisma faylida yozasiz. Declarative va sodda
  • TypeORM - TypeScript decoratorlar bilan entitiy classlar yaratasiz, umuman olganda yaxshi
  • Sequelize - object qilib yozasiz, shunchaki norm
  • Drizzle - function'lar ko'rinishida yozasiz, menga yoqadi!
  • Objection.js - class qilib yozasiz, JSON schema bilan input validation qo'shsa bo'ladi, lekin juda unchalik declarative emas

Migration support

  • Prisma - ✅✅ a'lo darajada! prisma cli tool orqali migratsiya yaratish va yuritish mumkin, yoki dev env uchun shunchaki database bilan sync qilsa bo'ladi, migratsiya querylarni generate qilishi yaxshi
  • TypeORM - ⚠️ o'rtacha, cli tool bor lekin unchalik aniq migration querylar generate qilib bermaydi va asosan buggy
  • Sequelize - ✅ yaxshi, chidasa bo'ladi
  • Drizzle - ✅✅ Prisma!
  • Objection.js - ⚠️ Knex orqali qilishgan va migration querylarni o'zingiz yozib chiqishingiz kerak ☹️

Performance

Stupid performance testdan olgan natijalarim (Insertion time of 100k users):

  • Prisma: 2:12.528 (m:ss.mmm)
  • TypeORM: 3:24.115 (m:ss.mmm)
  • Sequelize: 2:05.304 (m:ss.mmm)
  • Drizzle: 👑 1:41.666 (m:ss.mmm)
  • Objection.js: 1:53.682 (m:ss.mmm)

Community & Ecosystem

  • Prisma - ✅✅ a'lo darajada!
  • TypeORM - ✅ yaxshi, lekin maintenance negadir uncha yaxshimasday oxirgi vaqtlarda ☹️
  • Sequelize - ✅ yaxshi, lekin asosan qariyabdi va asta sekinlik bilan undan voz kechishyabdi ☹️
  • Drizzle - ✅ tez o'syabdi, lekin baribir nisbatan yosh
  • Objection.js - ⚠️ unchalik emas to'g'risi, norm

Developer experience, a.k.a. DX (or my own experience🙂)

  • Prisma - ✅✅ a'lo darajada!
  • TypeORM - ✅ yaxshi, lekin yana aytaman, ko'p asab buzadi ☹️
  • Sequelize - ⚠️ unchalik zo'r emas to'g'risi, shunga o'zi undan kechishyabdi deb o'ylayman
  • Drizzle - ✅✅ a'lo darajada!
  • Objection.js - ✅ amallasa bo'ladi :)

Xulosa

Prisma yoki Drizzle ishlating. The end!