برنامه نویسی

هدر رفتن حافظه را متوقف کنید: از .Lean () مانند یک حرفه ای استفاده کنید

مقدمه

خوب ، بیایید در مورد چیزی صحبت کنیم باید عقل سلیم باشید اما به نوعی اینگونه نیست: استفاده .lean() در مونگوز اگر تا به حال یک پرس و جو و فکر ساده نوشتید ، “چرا برنامه من از این همه حافظه استفاده می کند؟”، احتمال دارد که شما از آن استفاده نکنید .lean()بشر و اگر شما نوع توسعه دهنده ای هستید که دوست دارید در مورد آن انعطاف پذیر باشد بهینه سازی عملکرد اما هنوز هم نادیده می گیرد .lean()، این یکی برای شما است.

هک چیست .lean()؟

mongoose به طور معمول برمی گردد پر از چربی اسناد ، بارگیری شده با جادوی داخلی: گیرنده ها ، تنظیم کننده ها ، قلاب ها ، ردیابی تغییر-شما آن را نامگذاری می کنید. اما بیایید واقعی باشیم: 90 ٪ از زمان ، شما به آن کرک اضافی احتیاج ندارید وقتی فقط داده می خوانید.

وارد کردن .lean()، روشی ساده که به Mongoose می گوید:

“سلام ، یک سند فانتزی و نفخ به من ندهید. فقط یک شیء ساده جاوا اسکریپت به من بدهید. “

و رونق! شما فقط حافظه را ذخیره کرده اید ، سرعت پرس و جو را بهبود بخشیدید ، و حتی ممکن است API خود را 10 ٪ کمتر از آتش سوزی ایجاد کند.

چگونه .lean() کار می کند (با مثال)

بدون .lean() (رویکرد گرگ حافظه)

const article = await ArticlesModel.findOne({ title: "How to Waste Memory" });
console.log(article);
// Output: Mongoose Document with tons of hidden properties

console.log(typeof article); // "object" (but a heavy Mongoose object)
console.log(article.save); // Function exists! (But you never needed it, did you?)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا مشکل وجود دارد: این برمی گردد سند کامل Mongoose، بسته بندی شده با ویژگی های پنهان مانند .save()با .validate()وت موارد دیگری که هرگز در یک عملیات خوانده شده استفاده نخواهید کردبشر

با .lean() (راه هوشمند)

const article = await ArticlesModel.findOne({ title: "How to Optimize Performance" }).lean();
console.log(article);
// Output: { _id: "abc123", title: "How to Optimize Performance" }

console.log(typeof article); // "object" (plain JavaScript object)
console.log(article.save); // undefined (because you never needed it!)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بوم سریعتر ، سبک تر و بدون چمدان های غیر ضروری مونگوز.


چرا باید مراقبت کنید؟

1 .lean() پرس و جو را سریعتر می کند

  • اسناد کامل mongoose با پردازش اضافی همراه باشیدبشر
  • .lean() از بالای سرش پرش می کند و اشیاء JSON خام را برمی گرداند.

2 .lean() حافظه را ذخیره می کند 🧠

  • اسناد مونگوز مرجع به پایگاه داده را حفظ کنید (حافظه بیشتر).
  • اشیاء ساده؟ سبک تر ، کار با آن آسان تر است و برنامه خود را نفخ نکنید.

3. از ویژگی های غیر ضروری جلوگیری می کند 🚀

  • آیا شما نیاز دارید .save() در یک پرس و جو خوانده شده؟ شماره
  • آیا در یک سند از قبل ذخیره شده به اعتبار سنجی نیاز دارید؟ نه
  • آیا به مجازی نیاز دارید؟ پس استفاده نکنید .lean() (اطلاعات بیشتر در این مورد در زیر).

چه موقع استفاده نشود .lean()

من آن را دریافت کردم –.lean() به نظر می رسد جادو است. اما دریافت نکنید خیلی هیجان زده؛ این همیشه انتخاب درستی نیست. اینجا زمانی است که شما نباید از آن استفاده کنید:

🚨 اگر به ویژگی های طرحواره نیاز دارید (مجازی ، قلاب ، وسط نرم افزار)

const userSchema = new mongoose.Schema({
  firstName: String,
  lastName: String,
}, {
  toJSON: { virtuals: true },
});

userSchema.virtual("fullName").get(function () {
  return `${this.firstName} ${this.lastName}`;
});

const user = await UserModel.findOne({ firstName: "John" }).lean();
console.log(user.fullName); // undefined (because `.lean()` removes virtuals!)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

💡 راه حل؟ استفاده نکنید .lean() اگر به تحولات مبتنی بر طرحواره نیاز دارید.

🚨 اگر نیاز به تغییر و ذخیره سند دارید

const user = await UserModel.findOne({ name: "Alice" }).lean();
user.age = 30;
await user.save(); // ❌ ERROR! save() doesn't exist on plain objects.
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

💡 راه حل؟ اگر قصد دارید سند را به روز کنید و ذخیره کنید ، پرش کنید .lean()بشر


tl ؛ dr برای توسعه دهندگان تنبل

✅ استفاده کنید .lean() چه زمانی:

  • شما فقط نیاز دارید خواندن داده ها
  • شما می خواهید پرس و جوهای سریعتر و سبک وزنبشر
  • شما نیازی ندارید .save()، قلاب یا مجازی.

⛔ استفاده نکنید .lean() چه زمانی:

  • شما نیاز دارید مجازی ها ، میان افزار یا قلاب هابشر
  • شما می خواهید به اصلاح و ذخیره سند

افکار نهایی

mongoose عالی است ، اما کورکورانه استفاده از اسناد کامل در همه جا فقط یک عمل بد استبشر اگر برنامه شما لاغر است یا حافظه زیادی مصرف می کند ، .lean() است رفع ساده و یک خط این می تواند تفاوت بزرگی ایجاد کند.

بنابراین دفعه بعد کسی سؤال می کند “چرا API ما اینقدر کند است؟”، فقط پاسخ دهید:

“آیا شما استفاده کردید .lean()؟ “

و اگر آنها نه می گویند ، خوب … شما می دانید که چه کسی را سرزنش می کنید. 😎

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا