برنامه نویسی

حافظه پنهان در برنامه های کاربردی وب: راز عملکرد

Summarize this content to 400 words in Persian Lang
امروزه کاربران زمانی برای تلف کردن ندارند. آنها صفحاتی را می خواهند که در یک چشم به هم زدن بارگیری شوند، ناوبری سریع و عملکرد عالی داشته باشند. برای دستیابی به این سطح از سیالیت، توسعه دهندگان یک سلاح قدرتمند در اختیار دارند: حافظه پنهان.

اصطلاح “کش” در بحث عملکرد وب همه جا وجود دارد. البته هدف این نیست که مانند یک وحشی کش همه جا اعمال شود! نه. انواع مختلفی وجود دارد: کش مرورگر، کش سرور، کش API و حتی کش پایگاه داده که هر کدام نقش خاصی را ایفا می کنند.در این مقاله به شما پیشنهاد می کنم همه آن ها را مرور کنید تا بتوانید اپلیکیشن خود را به یک ماشین مسابقه ای کوچک تبدیل کنید! 🚨 🚘

حافظه پنهان: به چند دلیل ضروری است

عملکرد بهبود یافته: با ذخیره نتایج درخواستی مکرر، حافظه پنهان به جلوگیری از تکرار محاسبات پرهزینه یا بارگذاری مجدد داده ها با هر درخواست کمک می کند.
کاهش بار سرور: با محدود کردن تماس ها به پایگاه داده یا خدمات شخص ثالث، بار کلی سرور را کاهش می دهید.
تجربه کاربری بهتر: یک سایت سریع تجربه کاربر را بهبود می بخشد و آنها را تشویق می کند مدت بیشتری بمانند.

1. کش مرورگر: منابع را به صورت محلی نگهداری کنید

بیایید با آشناترین شروع کنیم: کش مرورگر. همانطور که از نام آن پیداست، این مرورگر کاربر است که این نوع کش را مدیریت می کند. یک مکانیسم است سمت مشتری که منابع را ذخیره می کند به صورت محلی در دستگاه کاربر هنگامی که شخصی از سایت شما بازدید می کند، مرورگر او منابع لازم (HTML، CSS، جاوا اسکریپت، تصاویر، فونت ها و غیره) را دانلود می کند و آنها را برای مدت زمان مشخصی در حافظه پنهان نگه می دارد. اگر کاربر بعداً به این صفحه بازگردد، مرورگر دوباره این فایل ها را از سرور درخواست نمی کند: آنها را مستقیماً بارگیری می کند. از کش محلی.

چگونه کار می کند؟

وقتی درخواست HTTP می کنید، سرور می تواند اضافه کند هدرهای HTTP (هدر) که به مرورگر می گوید که چگونه و چه مدت باید منابع ذخیره شده را نگه دارد.

THE سرصفحه های اصلی هستند:

Cache-Control : به مرورگر می گوید که چه مدت یک فایل را نگه دارد (مثلاً Cache-Control: max-age=86400 به مدت 24 ساعت).

ETag : نوعی اثر انگشت دیجیتال (هش) از محتوا. اگر محتوا تغییر نکند، ETag ثابت می ماند و مرورگر می داند که می تواند از منبع مجددا استفاده کند.

آخرین تغییر : مرورگر تاریخ آخرین اصلاح را مقایسه می کند تا بداند آیا باید منبعی را دوباره بارگیری کند یا خیر.

مثال با Symfony: پیکربندی هدرهای کش

در Symfony به راحتی می توانید کش مرورگر را در سطح مرورگر کنترل کنید. پاسخ های HTTP. در اینجا نحوه اضافه کردن دستورالعمل های کش در یک کنترلر آورده شده است:

مرورگر برای دانستن به هدرهای HTTP که سرور شما ارسال می کند متکی است چه مدت می تواند قبل از بارگیری مجدد یک منبع را در حافظه پنهان نگه دارد. اساساً، این هدرها به مرورگر می‌گویند: «می‌توانید این فایل‌ها را برای مدت X نگه دارید» یا «قبل از استفاده از آن، با سرور بررسی کنید که آیا این فایل تغییر کرده است».

مثال مشخص: یک صفحه پرسش و پاسخ ثابت

تصور کنید که یک صفحه پرسش و پاسخ را مدیریت می کنید که اغلب تغییر نمی کند. با کش مرورگر، می توانید از مرورگر بخواهید که صفحه را به مدت یک روز در حافظه نگه دارد، بدون اینکه هرگز به سرور بازگردد.

با تنظیم دستورالعمل های حداکثر سن و تغییرناپذیر، می توانید اطمینان حاصل کنید که این صفحه فقط یک بار در روز دانلود می شود.

مزایا:

سرعت برای کاربر: در هر بار بازدید فایل ها را دانلود نمی کند.
کاهش هزینه های سرور: درخواست های کمتر به معنای بار کمتر است.

محدودیت ها:

سمت کلاینت باقی می ماند: این نوع کش فقط از طریق دستگاه کاربر قابل دسترسی است. این بدان معناست که هر کاربر جدید یا هر مرورگر جدید، ابتدا باید منابع را قبل از استفاده از کش دانلود کند.
حافظه پنهان مرورگر هیچ کاری برای سرعت بخشیدن به اولین بازدید کاربر انجام نمی دهد.
شما باید نسخه های فایل را با دقت مدیریت کنید تا کش منابع منسوخ را حفظ نکند.

2. کش HTTP: بهینه سازی سمت سرور

اکنون به ادامه مطلب می پردازیم حافظه پنهان HTTP. در جایی که کش مرورگر یک بهینه سازی سمت مشتری است، کش HTTP سمت سرور است. توسط ابزارهایی مانند Varnish مدیریت می شود و به عنوان یک پروکسی بین برنامه وب شما و کاربر دخالت می کند. این می تواند هزاران درخواست را در ثانیه بدون نیاز به پرس و جو در PHP یا پایگاه داده ارائه دهد.

چگونه کار می کند؟

لاک زدن رهگیری می کند تمام درخواست‌های HTTP که به سرور شما می‌رسند و بررسی می‌کند که آیا نسخه‌ای از صفحه درخواستی قبلاً وجود دارد یا خیر موجود در حافظه پنهان. اگر چنین است، بدون نیاز به درخواست وب سرور یا پایگاه داده، مستقیماً با صفحه ذخیره شده پاسخ می دهد. ایده این است که بیشترین پاسخ های درخواستی را ذخیره کنید تا برنامه شما مجبور نباشد هر بار آنها را تولید کند. نتیجه: پاسخ های فوق العاده سریع و تسکین برای سرور شما.

نمونه پیکربندی Symfony برای Varnish:

Symfony به شما این امکان را می‌دهد تا با استفاده از همان هدرهای HTTP که برای کش مرورگر وجود دارد، به راحتی کنترل کنید که کدام عناصر باید توسط Varnish ذخیره شوند.

مثال در دنیای واقعی: لیستی از پست های وبلاگ

پست های وبلاگ به ندرت پس از انتشار تغییر می کنند. بنابراین می توانید از a استفاده کنید ETag تا به کش HTTP اجازه دهید بررسی کند که آیا محتوا تغییر کرده است، بدون نیاز به دانلود مرورگر دوباره کل صفحه

هنگامی که کاربر صفحه را مشاهده می کند، ETag تولید شده از محتوا با آنچه که کش قبلاً ذخیره کرده است مقایسه می شود. اگر چیزی تغییر نکرده باشد، پاسخ 304 Not Modified بدون انتقال مجدد محتویات برگردانده می شود.

مزایای کش وارنیش:

بهینه سازی برای همه کاربران: برخلاف کش مرورگر، Varnish برای همه کاربران، حتی کسانی که برای اولین بار از سایت شما بازدید می کنند، کار می کند.
به سرور متکی است: با ارائه مستقیم پاسخ های کش شده، Varnish از درخواست برنامه یا پایگاه داده شما اجتناب می کند، که به طور قابل توجهی عملکرد تحت بار را بهبود می بخشد.

3. کش سیستم: بهینه سازی داده ها در دراز مدت

کش سیستم در سطح سرور عمل می کند و نتایج محاسبات پیچیده، پرس و جوهای پایگاه داده سنگین، یا پاسخ های سرویس های شخص ثالث (API) را ذخیره می کند.

در Symfony، رایج ترین راه برای استفاده از این کش از طریق کامپوننت است Cache که به شما امکان دسترسی به انتزاعی از چندین سیستم کش (مانند Redis، Memcached یا سیستم فایل) را می دهد.

Symfony یک رابط کاربری ساده و موثر با عملکرد ارائه می دهد get(). این روش به شما این امکان را می دهد که اگر کلید از قبل وجود داشته باشد به کش دسترسی داشته باشید، یا اگر هنوز وجود ندارد، آن را در یک خط کد ایجاد کنید.

مثال با FilesystemAdapter (کش دیسک)

را FilesystemAdapter یک پیاده سازی است که داده های کش شده را مستقیماً روی دیسک سرور شما ذخیره می کند. زمانی که می‌خواهید بدون نیاز به یک راه‌حل حافظه پنهان خارجی مانند Redis، به سرعت شروع به کار کنید، مفید است.

Symfony به شما امکان مدیریت می دهد چندین نوع کش از طریق متفاوت آداپتورها. بنابراین شما محدود به سیستم فایل نیستید. اگر می‌خواهید به ذخیره‌سازی فوق سریع در حافظه ارتقا دهید، می‌توانید از خدماتی مانند ردیس یا Memcached.

مثال با RedisAdapter (کش در حافظه)

Redis یک انتخاب عالی برای برنامه هایی است که نیاز به حافظه پنهان با کارایی بالا دارند. با Redis، داده ها را مستقیماً در حافظه ذخیره می کنید، که بسیار سریعتر از هارد دیسک است.

مزایا:

درخواست های خارجی کمتر: شما بار روی سرورهای API را کاهش می دهید.
عملکرد بهتر: کاربران شما سریع‌تر پاسخ‌ها را دریافت می‌کنند.

4. کش پایگاه داده: بهینه سازی پرس و جوها

ما نمی توانیم در مورد کش بدون ذکر کش پایگاه داده صحبت کنیم. در Symfony، می‌توانید با استفاده از سیستم‌هایی مانند Doctrine Cache یا Redis از تکرار مداوم همان پرس‌وجوهای SQL گران‌قیمت خودداری کنید.

چگونه کار می کند؟

ایده این است که نتایج پرس و جوهای مکرر درخواستی را در حافظه ذخیره کنیم. هنگامی که همان پرس و جو دوباره ساخته می شود، به جای ارسال آن به پایگاه داده، Symfony پاسخ را از حافظه پنهان برمی گرداند.

مثال: حافظه پنهان محصولات پرفروش

بیایید تصور کنیم که می‌خواهید لیستی از پرفروش‌ترین محصولات را در یک فروشگاه تجارت الکترونیکی نمایش دهید، درخواستی که اجرای آن دشوار است.

روش دیگر: استفاده از کش ادغام شده در Doctrine (کش نتایج)

Doctrine همچنین سیستم کش نتایج پرس و جو خود را ارائه می دهد. مخصوصاً برای پنهان کردن بسیار کاربردی است مستقیماً در سطح ORM، فرآیند ذخیره سازی را شفاف تر می کند.

برای فعال کردن کش نتایج در دکترین، ابتدا باید یک آداپتور کش را پیکربندی کنید (مانند Redis یا فایل سیستم) در فایل شما doctrine.yaml :

سپس، می توانید نتیجه یک پرس و جو را مستقیماً در مخزن خود ذخیره کنید.

مثال: کش کردن با Doctrine Result Cache

useResultCache(true, 3600, ‘top_selling_products’) : حافظه نهان درخواست را با مدت زمان انقضا یک ساعت فعال می کنیم. کلید حافظه پنهان است top_selling_products.

کش Redis از طریق دکترین : Doctrine نتایج را به Redis (یا هر حافظه پنهان پیکربندی شده دیگری) ارسال می کند، که از اجرای چندباره پرس و جوی SQL یکسان در طول دوره کش جلوگیری می کند.

مزایا:

کاهش بار در پایگاه داده : با ذخیره کردن نتایج، به طور قابل توجهی بار روی پایگاه داده را کاهش می دهید، به خصوص برای پرس و جوهای سنگین یا مکرر.

زمان پاسخگویی بهبود یافته : با ارائه مستقیم نتایج از حافظه پنهان (که می تواند با Redis در حافظه باشد)، زمان دسترسی را در مقایسه با پرس و جوهای معمولی SQL کاهش می دهید.

سهولت استفاده : با Symfony و Doctrine، مدیریت حافظه پنهان به لطف روش هایی مانند بسیار آسان می شود get() از جزء Cache یا کش نتایج در دکترین ادغام شده است.

اکنون که بر هر نوع کش مسلط شده اید، این سوال روی لبان شما می سوزد: چگونه همه اینها با هم کار می کنند؟

در واقع، مکمل بودن حافظه های نهان است که به شما امکان می دهد یک برنامه واقعا کارآمد داشته باشید. حافظه پنهان مرورگر با ذخیره منابع مستقیماً در دستگاه کاربر، بازدیدهای مکرر کاربر را سرعت می بخشد. حافظه پنهان HTTP (Varnish) بارگذاری در سمت سرور را با سرویس دادن به صفحات ایجاد شده مستقیماً از حافظه آن بهینه می کند.

هدف؟ پیروزی در همه جبهه ها. مرورگر تضمین می کند که کاربر بدون نیاز به دانلود مجدد فایل ها اقدام نمی کند. Varnish به نوبه خود تضمین می کند که سرور شما با درخواست های اضافی بارگذاری نمی شود.

نتیجه گیری

فرقی نمی کند سمت مشتری باشد یا سمت سرور، همه چیز در مورد تعادل مناسب است. هر نوع کش مزایا و معایب خود را دارد، اما با ترکیب عاقلانه آنها می توانید به عملکرد فوق العاده ای دست پیدا کنید.

بنابراین، برای پیکربندی صحیح کش های خود وقت بگذارید، زیرا آنها می توانند تفاوت بین یک برنامه کند و یک برنامه رعد و برق سریع را ایجاد کنند!

امروزه کاربران زمانی برای تلف کردن ندارند. آنها صفحاتی را می خواهند که در یک چشم به هم زدن بارگیری شوند، ناوبری سریع و عملکرد عالی داشته باشند. برای دستیابی به این سطح از سیالیت، توسعه دهندگان یک سلاح قدرتمند در اختیار دارند: حافظه پنهان.

اصطلاح “کش” در بحث عملکرد وب همه جا وجود دارد. البته هدف این نیست که مانند یک وحشی کش همه جا اعمال شود! نه. انواع مختلفی وجود دارد: کش مرورگر، کش سرور، کش API و حتی کش پایگاه داده که هر کدام نقش خاصی را ایفا می کنند.
در این مقاله به شما پیشنهاد می کنم همه آن ها را مرور کنید تا بتوانید اپلیکیشن خود را به یک ماشین مسابقه ای کوچک تبدیل کنید! 🚨 🚘


حافظه پنهان: به چند دلیل ضروری است

  • عملکرد بهبود یافته: با ذخیره نتایج درخواستی مکرر، حافظه پنهان به جلوگیری از تکرار محاسبات پرهزینه یا بارگذاری مجدد داده ها با هر درخواست کمک می کند.
  • کاهش بار سرور: با محدود کردن تماس ها به پایگاه داده یا خدمات شخص ثالث، بار کلی سرور را کاهش می دهید.
  • تجربه کاربری بهتر: یک سایت سریع تجربه کاربر را بهبود می بخشد و آنها را تشویق می کند مدت بیشتری بمانند.

1. کش مرورگر: منابع را به صورت محلی نگهداری کنید

بیایید با آشناترین شروع کنیم: کش مرورگر. همانطور که از نام آن پیداست، این مرورگر کاربر است که این نوع کش را مدیریت می کند. یک مکانیسم است سمت مشتری که منابع را ذخیره می کند به صورت محلی در دستگاه کاربر هنگامی که شخصی از سایت شما بازدید می کند، مرورگر او منابع لازم (HTML، CSS، جاوا اسکریپت، تصاویر، فونت ها و غیره) را دانلود می کند و آنها را برای مدت زمان مشخصی در حافظه پنهان نگه می دارد. اگر کاربر بعداً به این صفحه بازگردد، مرورگر دوباره این فایل ها را از سرور درخواست نمی کند: آنها را مستقیماً بارگیری می کند. از کش محلی.

چگونه کار می کند؟

وقتی درخواست HTTP می کنید، سرور می تواند اضافه کند هدرهای HTTP (هدر) که به مرورگر می گوید که چگونه و چه مدت باید منابع ذخیره شده را نگه دارد.

THE سرصفحه های اصلی هستند:

  • Cache-Control : به مرورگر می گوید که چه مدت یک فایل را نگه دارد (مثلاً Cache-Control: max-age=86400 به مدت 24 ساعت).
  • ETag : نوعی اثر انگشت دیجیتال (هش) از محتوا. اگر محتوا تغییر نکند، ETag ثابت می ماند و مرورگر می داند که می تواند از منبع مجددا استفاده کند.
  • آخرین تغییر : مرورگر تاریخ آخرین اصلاح را مقایسه می کند تا بداند آیا باید منبعی را دوباره بارگیری کند یا خیر.

مثال با Symfony: پیکربندی هدرهای کش

در Symfony به راحتی می توانید کش مرورگر را در سطح مرورگر کنترل کنید. پاسخ های HTTP. در اینجا نحوه اضافه کردن دستورالعمل های کش در یک کنترلر آورده شده است:

مرورگر برای دانستن به هدرهای HTTP که سرور شما ارسال می کند متکی است چه مدت می تواند قبل از بارگیری مجدد یک منبع را در حافظه پنهان نگه دارد. اساساً، این هدرها به مرورگر می‌گویند: «می‌توانید این فایل‌ها را برای مدت X نگه دارید» یا «قبل از استفاده از آن، با سرور بررسی کنید که آیا این فایل تغییر کرده است».

مثال مشخص: یک صفحه پرسش و پاسخ ثابت

تصور کنید که یک صفحه پرسش و پاسخ را مدیریت می کنید که اغلب تغییر نمی کند. با کش مرورگر، می توانید از مرورگر بخواهید که صفحه را به مدت یک روز در حافظه نگه دارد، بدون اینکه هرگز به سرور بازگردد.

با تنظیم دستورالعمل های حداکثر سن و تغییرناپذیر، می توانید اطمینان حاصل کنید که این صفحه فقط یک بار در روز دانلود می شود.

هدر HTTP حافظه پنهان مرورگر مکمل

مزایا:

  • سرعت برای کاربر: در هر بار بازدید فایل ها را دانلود نمی کند.
  • کاهش هزینه های سرور: درخواست های کمتر به معنای بار کمتر است.

محدودیت ها:

  • سمت کلاینت باقی می ماند: این نوع کش فقط از طریق دستگاه کاربر قابل دسترسی است. این بدان معناست که هر کاربر جدید یا هر مرورگر جدید، ابتدا باید منابع را قبل از استفاده از کش دانلود کند.
  • حافظه پنهان مرورگر هیچ کاری برای سرعت بخشیدن به اولین بازدید کاربر انجام نمی دهد.
  • شما باید نسخه های فایل را با دقت مدیریت کنید تا کش منابع منسوخ را حفظ نکند.

2. کش HTTP: بهینه سازی سمت سرور

اکنون به ادامه مطلب می پردازیم حافظه پنهان HTTP. در جایی که کش مرورگر یک بهینه سازی سمت مشتری است، کش HTTP سمت سرور است.
توسط ابزارهایی مانند Varnish مدیریت می شود و به عنوان یک پروکسی بین برنامه وب شما و کاربر دخالت می کند. این می تواند هزاران درخواست را در ثانیه بدون نیاز به پرس و جو در PHP یا پایگاه داده ارائه دهد.

چگونه کار می کند؟

لاک زدن رهگیری می کند تمام درخواست‌های HTTP که به سرور شما می‌رسند و بررسی می‌کند که آیا نسخه‌ای از صفحه درخواستی قبلاً وجود دارد یا خیر موجود در حافظه پنهان. اگر چنین است، بدون نیاز به درخواست وب سرور یا پایگاه داده، مستقیماً با صفحه ذخیره شده پاسخ می دهد. ایده این است که بیشترین پاسخ های درخواستی را ذخیره کنید تا برنامه شما مجبور نباشد هر بار آنها را تولید کند. نتیجه: پاسخ های فوق العاده سریع و تسکین برای سرور شما.

نمونه پیکربندی Symfony برای Varnish:

Symfony به شما این امکان را می‌دهد تا با استفاده از همان هدرهای HTTP که برای کش مرورگر وجود دارد، به راحتی کنترل کنید که کدام عناصر باید توسط Varnish ذخیره شوند.

سرصفحه کش HTTP Varnish

مثال در دنیای واقعی: لیستی از پست های وبلاگ

پست های وبلاگ به ندرت پس از انتشار تغییر می کنند. بنابراین می توانید از a استفاده کنید ETag تا به کش HTTP اجازه دهید بررسی کند که آیا محتوا تغییر کرده است، بدون نیاز به دانلود مرورگر دوباره کل صفحه

هنگامی که کاربر صفحه را مشاهده می کند، ETag تولید شده از محتوا با آنچه که کش قبلاً ذخیره کرده است مقایسه می شود. اگر چیزی تغییر نکرده باشد، پاسخ 304 Not Modified بدون انتقال مجدد محتویات برگردانده می شود.

مزایای کش وارنیش:

  • بهینه سازی برای همه کاربران: برخلاف کش مرورگر، Varnish برای همه کاربران، حتی کسانی که برای اولین بار از سایت شما بازدید می کنند، کار می کند.
  • به سرور متکی است: با ارائه مستقیم پاسخ های کش شده، Varnish از درخواست برنامه یا پایگاه داده شما اجتناب می کند، که به طور قابل توجهی عملکرد تحت بار را بهبود می بخشد.

3. کش سیستم: بهینه سازی داده ها در دراز مدت

کش سیستم در سطح سرور عمل می کند و نتایج محاسبات پیچیده، پرس و جوهای پایگاه داده سنگین، یا پاسخ های سرویس های شخص ثالث (API) را ذخیره می کند.

در Symfony، رایج ترین راه برای استفاده از این کش از طریق کامپوننت است Cache که به شما امکان دسترسی به انتزاعی از چندین سیستم کش (مانند Redis، Memcached یا سیستم فایل) را می دهد.

Symfony یک رابط کاربری ساده و موثر با عملکرد ارائه می دهد get(). این روش به شما این امکان را می دهد که اگر کلید از قبل وجود داشته باشد به کش دسترسی داشته باشید، یا اگر هنوز وجود ندارد، آن را در یک خط کد ایجاد کنید.

مثال با FilesystemAdapter (کش دیسک)

را FilesystemAdapter یک پیاده سازی است که داده های کش شده را مستقیماً روی دیسک سرور شما ذخیره می کند. زمانی که می‌خواهید بدون نیاز به یک راه‌حل حافظه پنهان خارجی مانند Redis، به سرعت شروع به کار کنید، مفید است.

حافظه پنهان سیستم فایل

Symfony به شما امکان مدیریت می دهد چندین نوع کش از طریق متفاوت آداپتورها. بنابراین شما محدود به سیستم فایل نیستید. اگر می‌خواهید به ذخیره‌سازی فوق سریع در حافظه ارتقا دهید، می‌توانید از خدماتی مانند ردیس یا Memcached.

مثال با RedisAdapter (کش در حافظه)

کش Redis Symfony

Redis یک انتخاب عالی برای برنامه هایی است که نیاز به حافظه پنهان با کارایی بالا دارند. با Redis، داده ها را مستقیماً در حافظه ذخیره می کنید، که بسیار سریعتر از هارد دیسک است.

مزایا:

  • درخواست های خارجی کمتر: شما بار روی سرورهای API را کاهش می دهید.
  • عملکرد بهتر: کاربران شما سریع‌تر پاسخ‌ها را دریافت می‌کنند.

4. کش پایگاه داده: بهینه سازی پرس و جوها

ما نمی توانیم در مورد کش بدون ذکر کش پایگاه داده صحبت کنیم. در Symfony، می‌توانید با استفاده از سیستم‌هایی مانند Doctrine Cache یا Redis از تکرار مداوم همان پرس‌وجوهای SQL گران‌قیمت خودداری کنید.

چگونه کار می کند؟

ایده این است که نتایج پرس و جوهای مکرر درخواستی را در حافظه ذخیره کنیم. هنگامی که همان پرس و جو دوباره ساخته می شود، به جای ارسال آن به پایگاه داده، Symfony پاسخ را از حافظه پنهان برمی گرداند.

مثال: حافظه پنهان محصولات پرفروش

بیایید تصور کنیم که می‌خواهید لیستی از پرفروش‌ترین محصولات را در یک فروشگاه تجارت الکترونیکی نمایش دهید، درخواستی که اجرای آن دشوار است.

کش کوئری SQL

روش دیگر: استفاده از کش ادغام شده در Doctrine (کش نتایج)

Doctrine همچنین سیستم کش نتایج پرس و جو خود را ارائه می دهد. مخصوصاً برای پنهان کردن بسیار کاربردی است مستقیماً در سطح ORM، فرآیند ذخیره سازی را شفاف تر می کند.

برای فعال کردن کش نتایج در دکترین، ابتدا باید یک آداپتور کش را پیکربندی کنید (مانند Redis یا فایل سیستم) در فایل شما doctrine.yaml :

دکترین.yaml

سپس، می توانید نتیجه یک پرس و جو را مستقیماً در مخزن خود ذخیره کنید.

مثال: کش کردن با Doctrine Result Cache

دکترین کش نتایج

  1. useResultCache(true, 3600, 'top_selling_products') : حافظه نهان درخواست را با مدت زمان انقضا یک ساعت فعال می کنیم. کلید حافظه پنهان است top_selling_products.
  2. کش Redis از طریق دکترین : Doctrine نتایج را به Redis (یا هر حافظه پنهان پیکربندی شده دیگری) ارسال می کند، که از اجرای چندباره پرس و جوی SQL یکسان در طول دوره کش جلوگیری می کند.

مزایا:

  • کاهش بار در پایگاه داده : با ذخیره کردن نتایج، به طور قابل توجهی بار روی پایگاه داده را کاهش می دهید، به خصوص برای پرس و جوهای سنگین یا مکرر.
  • زمان پاسخگویی بهبود یافته : با ارائه مستقیم نتایج از حافظه پنهان (که می تواند با Redis در حافظه باشد)، زمان دسترسی را در مقایسه با پرس و جوهای معمولی SQL کاهش می دهید.
  • سهولت استفاده : با Symfony و Doctrine، مدیریت حافظه پنهان به لطف روش هایی مانند بسیار آسان می شود get() از جزء Cache یا کش نتایج در دکترین ادغام شده است.

اکنون که بر هر نوع کش مسلط شده اید، این سوال روی لبان شما می سوزد: چگونه همه اینها با هم کار می کنند؟

در واقع، مکمل بودن حافظه های نهان است که به شما امکان می دهد یک برنامه واقعا کارآمد داشته باشید. حافظه پنهان مرورگر با ذخیره منابع مستقیماً در دستگاه کاربر، بازدیدهای مکرر کاربر را سرعت می بخشد. حافظه پنهان HTTP (Varnish) بارگذاری در سمت سرور را با سرویس دادن به صفحات ایجاد شده مستقیماً از حافظه آن بهینه می کند.

هدف؟ پیروزی در همه جبهه ها. مرورگر تضمین می کند که کاربر بدون نیاز به دانلود مجدد فایل ها اقدام نمی کند. Varnish به نوبه خود تضمین می کند که سرور شما با درخواست های اضافی بارگذاری نمی شود.

نتیجه گیری

فرقی نمی کند سمت مشتری باشد یا سمت سرور، همه چیز در مورد تعادل مناسب است. هر نوع کش مزایا و معایب خود را دارد، اما با ترکیب عاقلانه آنها می توانید به عملکرد فوق العاده ای دست پیدا کنید.

بنابراین، برای پیکربندی صحیح کش های خود وقت بگذارید، زیرا آنها می توانند تفاوت بین یک برنامه کند و یک برنامه رعد و برق سریع را ایجاد کنند!

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

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

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

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