در برنامه های تحت وب، با توجه به اینکه بخش عمدهای از پردازش بر روی یک سرور مرکزی انجام میشود، بهینهسازی از اهمیت بسیار بالایی برخوردار است.
یکی از روشهای افزایش سرعت «بارگزاری دیرهنگام» یا «Lazy Loading» نام دارد.
در این روش سعی میکنیم پردازشهای سنگین را تا زمانی که به نتایج آنها نیاز نیست به تاخیر بیندازیم
بهترین نمونهی قابل ذکر برای آن، تاخیر در واکشی بخشی از اطلاعات پایگاه داده است. این تاخیر میتواند سرعت شروع به کار را افزایش دهد. از طرف دیگر ممکن است درخواستی برای اطلاعات مورد نظر ایجاد نشود و در نتیجه یک واکشی سنگین از پردازشهای نرمافزار حذف شود.
برای روشنشدن بیشتر موضوع به مثال زیر توجه کنید:
class options_class { private $options = array(); private $loaded = false; // Lazy loading state public function get_value( $name ) { // Lazy load options if( $this -> loaded == false ) { $this -> loaded = true; $query = sprintf( 'SELECT * FROM `%s`', TABLE_OPTIONS ); if( $res = mysql_query( $query ) ) { while( $row = mysql_fetch_assoc( $res ) ) { $this -> options[ $row[ 'op_name' ] ] = $row[ 'op_value' ]; } } } if( isset( $this -> options[ $name ] ) ) { return $this -> options[ $name ]; } else { return ''; } } } |
در کلاس بالا تابع get_value وظیفهی بازگرداندن اطلاعاتی را از پایگاه داده بر عهده دارد.
هنگام نمونهسازی، واکشی اطلاعات از بانک اطلاعاتی به نخستین فراخوانی تابع get_value موکول میشود و در فراخوانیهای بعد، از Cache برای افزایش کارایی بهرهگیری میشود.
با انجام این دو بهسازی، مراجعه به پایگاه داده حداقل صفر و حداکثر یک بار خواهد بود و در نتیجه کمترین فشار ممکن بر روی سرور بار میشود.
// Do not load anything here $options = new options_class(); // ... // Lazy load all options and return specified value echo $options -> get_value( 'test_option' ); // ... // Use cached data echo $options -> get_value( 'test_option' ); |
روش خوبیه
اما این فلاش با ob_start() تناقضی نداره
منظورم اینه که برای header که بعدا استفاده کنیم تو اسکریپت مشکلی پیش نمیاد
یا برای cookie_set()
با سلام
اگر از روش MVC استفاده کنید، عملیات ارسال کوکی یا تغییر سرآمد اصولا باید در کنترلر انجام بشه
یعنی قبل از اینکه View به نمایش در بیاد
اگر بخش تصمیمگیری و نمایش شما یکی باشه، بعد از flush امکان ارسال کوکی و تغییر سرآمد وجود نخواهد داشت.