مقدمه

1 روش کد نویسی بهینه استفاده از روش Flyweight یا Cache است که با استفاده از آن می توانید مشکلات زیادی را در کدنویسی برطرف نمایید.

امروزه شاهد سایت ها و نرم افزار های زیادی هستیم که وقتی متحمل بار زیادی می شوند سریع حافظه RAM سیستم را پر میکنند و باعث میشوند تا سیستم Crash کند.

اینجاست که اکثر استفاده کنندگان مجموعه مربوطه حاضر نخواهند بود تا دیگر حتی استفاده از سیستم مورد نظر را امتحان کنند. در این قسمت قصد داریم تا به بررسی 1 روش کد نویسی بهینه بپردازم.

درواقع موضوع مورد بحث یکی از Design Pattern های موجود است که برای بهینه سازی سیستم استفاده می گردد.

روش Flyweight یا Cache

این روش  با نام Cache نیزشناخته می شود

مشکل

فرض کنید وبسایت فروشگاهی دارید که هر گاه یک مشتری بدان مراجعه می کند یک شی به نام Customer برای وی ایجاد می نماید. اطلاعات خاصی درون این شی نگهداری می گردد. مثل نام، نام خانوادگی، قد، وزن ، لیست آخرین خرید ها، علاقه مندی ها و… بیشمار اطلاعات دیگر.

هر کدام از اطلاعات بیان شده ممکن است چند کلیوبایت اطلاعات ذخیره کنند. قطعا زیاد نیست اما اگر 10000 مشتری همزمان به وبسایت شما مراجعه نمایند و تنها یک درخواست ساده ارسال نمایند و داده های موجود در Customer را مطالبه کنند. ممکن است مشتریان زیادی شاهد خطای 5XX از سیستم شما باشند. مثلا اگر شی Customer برای هر کاربر 40 کیلوبایت باشد. برای 10000 کاربر (با فقط یک مراجعه) 390 مگابایت مصرف حافظه موقت خواهد داشت. حالا فرض کنیم تعداد کاربران به 1000000 برسد. عملا این سیستم فقط 38 گیگابایت صرف مصرف حافظه موقت تنها برای یک درخواست کاربر خواهد کرد.

خطای 5XX عملا به مفهوم امتیاز بسیار پایین توسط موتور های جستجو است.

با مشاهده این خطا موتور های جستجو سیستم شما را مریضی فرض می کنند که توانایی ارائه خدمات ندارد.

بارها مشاهده می شود که سیستم ها را با قیمت فوق العاده ارزان تهییه نموده اند اما عملا وقت به سمر نشستن محصول توانایی ارائه خدمات نخواهد داشت و تمام مشتریان خود را از دست می دهد.

راهکار

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

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

ما میتوانیم برای هر گروه از کاربران که رنگ خاصی را دوست دارند یک شی برای رنگ ایجاد کرده و به تمامی کاربرانی که شی Customer را دارند اختصاص دهیم. با این کار ممکن است 4 کیلوبایت از مصرف حافظه موقت کم کنیم.

با این راهکار سیستم میتواند شی Customer بیشتری در حافظه نگهداری کند. ازطرفی این 4 کیلوبایت ها هستند که وقتی تعداد مراعجه به سیستم زیاد میشوند سیستم را ئایدار و سرپا نگه می دارند.

پیاده سازی با استفاده از چارچوب لاراول

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

استفاده از کش برای کدنویسی می تواند سرعت سیستم شما را چندین برابر ارتقاع دهد.

اگر تمایل به یادگیری لاراول دارید میتوانید از آموزش لاراول شروع نمایید.

داده های یکتا و کش شده

در مثال فروشگاه شی Customer دارای دو نوع داده می باشد.

  1. اطلاعات یکتای کاربر (نام، نام خانوادگی و…)
  2. اطلاعاتی که بین چندیدن کاربر مشترک هستند. مثل : رنگ مورد علاقه

میتوان برای هر گروه رنگی یک دسته ایجاد کرد (بصورت پویا) و با این کار در مصرف Ram صرفه جوی نمود. این داده مشترک Flyweight یا Cache نامیده میشود.

چه موقع از این روش استفاده نماییم؟

این روش یک روش بهینه سازی است. پس زمانی این عمل را انجام دهید که امکان پیاده سازی بخشی از داده در سیستم شما بصورت کش وجود داشته باشد.

یا این که بخواهید سیستم مورد نظر را بهینه نمایید. چرا که برخی از سیستم ها اصلا احتیاج به بهینه سازی ندارند.

مشکل امنیتی نرم افزار های غیر بهینه

یکی از مشکلات امنیتی ارسال بار زیاد روی یک سیستم است. اگر سیستمی بهینه نباشد با ارسال درخواست زیاد از ip های متنوع به شیوه ویروسی می توان باعث پر شدن حافظه موقت وبسایت گردید و سیستم کرش می کند و خطاهای 5XX منتشر خواهد کرد.

معایب روش Flyweight

این شیوه معماری نرم افزار باعث یچیده شدن کدنویسی سیستم خواهد شد. از این رو خیلی از تیم های توسعه یا از زیر بار این نوع کد نویسی ها فرار میکنند و یا این که اصلا از وجود آنها بی اطلاع هستند.