BehrouzPc
پــــادشــاه فــلــــش

بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که کارایی بهتری دارند پیش گام باشیم و همواره بهترین و بهینه ترین روش را استفاده کنیم. در این مجموعه آموزشی بهینه سازی فلش به نکات مهم برای مدیریت بر عناصر و حافظه ها … می پردازیم و تلاش می کنیم که بتوانیم با استفاده از نکات ارائه شده خروجی بهینه تر و سبک تری از پروژه فلش خود داشته باشیم.
آزاد سازی حافظه (Memory)
شما نمی توانید جمع آور زباله (garbage collector) را به صورت مستقیم در فلش پلیر اجرا کنید. برای این که اطمینان پیدا کنید که یک شی جمع آوری شده است می بایست تمامی منابع آن را حذف کنید. به یاد داشته باشید که عملگر مورد استفاده در اکشن اسکریپت ۱ و ۲ رفتار متفاوتی در اکشن اسکریپت ۳ دارد. این مورد را تنها می توان برای حذف خصوصیات پویا (Dynamic) از یک شی پویا استفاده نمود.
توضیح : جمع آوری زباله (Garbage collection) یک اصطلاح می باشد که به عمل پاک سازی و جمع آوری اشیاء (object) هایی که استفاده ای نمی شوند و حافظه را اشغال کرده اند ، اطلاق می شود.
تذکر: شما می توانید جمع آوری کننده زباله (garbage collector) را در ادوبی ایر (Adobe AIR) و نسخه (Debug) فلش پلیر به صورت مستقیم فراخوانی کنید.
به عنوان مثلا ،در کد زیر منابع یک Sprite را برابر با null قرار می دهیم ؛ و با این کار جمع آور زباله آن را از حافظه حذف می کند.
PHP:
var mySprite:Sprite = new Sprite();
// منابع مربوطه با نال (تهی) مقدار دهی شد و در نتیجه جمع آور زباله این مورد را از حافظه حدف می کند.
mySprite = null;
تخصیص درست حافظه ، ترجیح داده می شود به حذف شی (obejct) و آغاز جمع آوری زباله.
زمانی که جمع آورنده زباله (garbage collector) اجرا می شود ،فهرستی از اشیاء ی که جمع آوری نشده است را ایجاد می کند. حال اشیاء غیر فعال درون فهرست که دیگر استفاده نمی شوند ، با تشخیص منابع اشیاء در دیگر اشیاء ، مشخص می شود ، اشیاء غیرفعالشناسایی شده از این راه حذف می شوند.
در برنامه های بزرگ ، این فرایند می تواند باعث تشدید فشار بر پردازنده (CPU-intensive) ، تاثیر بر کارایی برنامه (performance) و کاهش قابل توجه سرعت در برنامه شود. سعی کنید به منظور محدود کردن جمع آوری زباله (garbage collection) تا آن جا که امکان پذیر است از ، استفاده دوباره از اشیاء استفاده کنید.
همچنین از دادن مقدار null به منابع بی استفاده ، در زمانی که امکان دارد ، استفاده کنید. با این کار جمع آورنده زباله (garbage collector) پردازش کمتری برای پیدا کردن اشیاء خواهد داشت. می توان به جمع آوری زباله (garbage collection) مثل بیمه حافظه مصرفی یک برنامه نگاه کرد ، و در ضمن همیشه سعی کنید به مدیریت طول عمر اشیاء (در صورت امکان) دقت کنید.
تذکر : تعیین یک مرجع از یک شی نمایشی (display object) با مقدار null تضمینی برای این که آن شی منجمد (freeze) شده باشد نیست. شی همچنان به مصرف پردازنده (CPU) در سیکل زمانی ادامه می دهد تا زمانی که جمع آوری زباله انجام شود. قبل از مقدار دهی منابع به null ، اطمینان حاصل کنید که شی شما به درسی غیر فعال شده است.
جمع آورنده زباله را می توانید با استفاده از متد System.gc() فراخوانی کنید ، البته توجه داشته باشید این فراخوانی مستقیم مربوطه به Adobe Air و فلش پلیر نسخه Debug می باشد. Profiler toolbar ی که همراه برنامه Adobe Flash Builder می باشد به شما این امکان را می دهد که به صورت دستی جمع آور زباله (garbage collector) را شروع کنید. با اجرای جمع آورنده زباله شما این امکان را دارید که مشاهده کنید که چگونه برنامه شما پاسخ می دهد و آیا اشیاء به درستی از حافظه حذف شده است یا خیر.
تذکر : اگر یک شی به عنوان یک شنونده (listener) رویداد استفاده شده است ، شی دیگر می تواند به آن ارجاع شود. اگر این حالت باشد ، می بایست رویداد شنوندها توسط متد removeEventListener() قبل از مقدار دهی null به شی حذف شود.
خوشبختانه ، مقدار حافظه استفاده شده توسط bitmap ها را می توان مستقیم کاهش داد. به عنوان مثل کلاس BitmapData دارای متد dispose() می باشد. در مثال بعدی ، یک BitmapData ایجاد می کنیم (۱.۸MB حافظه). حافظه جاری به مقدار ۱.۸MB افزایش پیدا می کند. توسط خصوصیت System.totalMemory می توانیم خروجی حافظه اشغال شده را مشاهده کنیم :
PHP:
trace(System.totalMemory / 1024);
// خروجی : ۴۳۱۰۰
// ساخت یک نمونه BitmapData
var image:BitmapData = new BitmapData(800, 600);
trace(System.totalMemory / 1024);
// خروجی : ۴۴۹۶۴
PHP:
trace(System.totalMemory / 1024);
// خروجی: ۴۳۱۰۰
// ساخت یک نمونه BitmapData
var image:BitmapData = new BitmapData(800, 600);
trace(System.totalMemory / 1024);
// خروجی : ۴۴۹۶۴
image.dispose();
image = null;
trace(System.totalMemory / 1024);
// خروجی : ۴۳۰۸۴
تذکر : فلش پلیر ۱۰.۱ و ادوبی ایر ۱.۳.۲ متد جدیدی با نام disposeXML() بر روی کلاس های System معرفی نموده اند. این متد به شما این امکان را می دهد که با مقدار دهی XML tree به عنوان پارامتر آن ، شی XML را بلافاصله برای جمع آوری زباله (garbage collection) آماده کنید.
موفق و پیروز باشید.
منبع
آخرین ویرایش: