خانه » ادوبی ایر » بهینه سازی فلش – استفاده دوباره از Object ها

بهینه سازی فلش – استفاده دوباره از Object ها

بهینه سازی فلش – استفاده دوباره از Object ها

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

بخش دوم – استفاده دوباره از Object ها

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


import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;

const MAX_NUM:int = 18;

const LINE_WIDTH:int = 30;
const LINE_HEIGHT:int = 400;

const COLOR:uint = 0xCCCCCC;

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,COLOR);//200 , 200 , true);
var myBitmap:Bitmap;

var area:Rectangle;
for (var i:int = 0; i < MAX_NUM; i++)
{

	//نمونه روش غلط - از کد زیر استفاده نکنید

	area = new Rectangle(i*LINE_WIDTH,0,LINE_WIDTH,LINE_HEIGHT);

	myBitmapData.fillRect(area,Math.random()*COLOR);
	myBitmap = new Bitmap(myBitmapData);
	addChild(myBitmap);

}

بازسازی شی Rectangle در هر تکرار حلقه مقدار بیشتری حافظه را استفاده می کند و اجرا را کند تر می کند ، زیرا شی جدید ساخته می شود.

به روشی که در کد زیر استفاده شده است دقت کنید :

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;

const MAX_NUM:int = 18;

const LINE_WIDTH:int = 30;
const LINE_HEIGHT:int = 400;

const COLOR:uint = 0xCCCCCC;

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,COLOR);
var myBitmap:Bitmap;

// ساخت شی خارج از حلقه
var area:Rectangle = new Rectangle(0,0,LINE_WIDTH,LINE_HEIGHT);

for (var i:int = 0; i < MAX_NUM; i++)
{

	//تغییر مختصات به صورت مجزا
	area.x = i * LINE_WIDTH;

	myBitmapData.fillRect(area,Math.random()*COLOR);

}

myBitmap = new Bitmap(myBitmapData);
addChild(myBitmap);

همان طور که مشاهده می کنید این کد هم همان خروجی و نتیجه مورد اول را دارد ولی بهینه سازی در آن انجام شده و حافظه کمتری را اشغال می کند.

مثال قبلی شی مربوطه ، تاثیر نسبتا کمی در استفاده از حافظه داشت ، در مثال بعدی با استفاده از شی BitmapData  تعداد زیادی مربع توسط یک حلقه ایجاد می شود

کد زیر مربع هایی را به حالت موزاییک به صفحه اضافه می کند :


var myImage:BitmapData;

var myContainer:Bitmap;

const MAX_NUM:int = 300;

for (var i:int = 0; i< MAX_NUM; i++)
{

	// ساخت بیت مپ ۲۰ در ۲۰ پیکسل که شفافیت پس زمینه در آن غیر فعال شده است
	myImage = new BitmapData(20,20,false,0xF0D062);

	// ساخت یک نگه دارند برای هر مورد به صورت مجزا

	myContainer = new Bitmap(myImage);

	// افزودن به لیست نمایش - Display List

	addChild(myContainer);

	// موقعیت دهی هر نگه دارنده

	myContainer.x = (myContainer.width + 8 ) * Math.round(i % 20);

	myContainer.y = (myContainer.height + 8 ) * int(i / 20);

}

در نسخه بهینه سازی شده کد بالا (که در زیر قابل مشاهده است) یک BitmapData ایجاد می شود و برای چندین بار برای هر Bitmap استفاده می شود و نتیجه مشابه مورد قبل نیز خواهیم داشت، البته با اشغال مقدار کمتری از حافظه.

// ساخت بیت مپ ۲۰ در ۲۰ پیکسل که شفافیت پس زمینه در آن غیر فعال شده است
var myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);

var myContainer:Bitmap;

const MAX_NUM:int = 300;

for (var i:int = 0; i< MAX_NUM; i++)
{

	//ساخت یک نگه دارنده که به بیت مپ کلاس تعریف شده ارجاع می شود

	myContainer = new Bitmap(myImage);
	// افزودن به لیست نمایش - Display List
	addChild(myContainer);
	// موقعیت دهی هر نگه دارنده
	myContainer.x = (myContainer.width + 8 ) * Math.round(i % 20);

	myContainer.y = (myContainer.height + 8 ) * int(i / 20);

}

در این مورد با بهینه سازی انجام شده نزدیک به ۶۵۰ تا ۷۰۰ کیلوبایت در حافظه (memory) فلش بهینه سازی انجام شده است که مقدار قابل توجهی می باشد به خصوص برای برنامه هایی که برای گوشی ها و دستگاه هایی به غیر کامپیوتر ها آماده می شود.

روش دست یابی به مقدار حافظه مصرفی در فلش:

از کد ساده زیر استفاده کنید در در پنجره خروجی output مقدار حافظه مصرفی را مشاهده کنید.


trace(Number( System.totalMemory / 1024 / 1024 ).toFixed( 2 ), "Mb");

نکته :

کد زیر که در نمونه اول ذکر شده است برای تولید یک رنگ تصادفی استفاده می شود در واقع مقدار یک رنگ که به عنوان ثابت در ابتدا تعریف شدن در فرمان random ضرب می شود که حاصل آن یک رنگ اتفاقی می باشد.

Math.random()*COLOR;

موفق و پیروز باشید.

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

4 نظر

  1. سلام، سایت خوب و با محتوایی در زمینه فلش دارید، اولین بار که سایتتون رو دیدم خیلی خوشم اومد (مخصوصا از روحیه آموزش رایگان)
    در حال حاضر یک سایت (به اسم مرکز فلش) طراحی کردم که قصد انتشار مطالب آموزشی فلش و ایر دارم، البته هنوز خیلی کار داره. انشاءالله تو آینده بیشتر با هم همکاری کنیم.
    مولا یارتون

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

  2. دوست عزیز از سایت خوبتون تشکر میکنم من اکشن اسکریپت ۱ و ۲ را تقریبا به طور کامل بلد هستم و میخواهم با اکشن اسکریپت ۳ به طور حرفه ای کار کنم مخصوصا استفاده از روشهای برنامه نویسی شی گرا و استفاده از کلاسها میخواستم از شما دوست عزیز خواهش کنم که منابع خوب اموزش مانند کتاب یا سایتهای مفید در این زمینه به زبان فارسی یا انگلیسی را به من معرفی کنید . اگر ممکنه به من ایمیل بزنید
    بازهم از سایت خوبت تشکر میکنم و امیدوارم که موفق باشی

    • سلام دوست عزیز
      در مورد منابع و کتاب موارد زیادی هست که بیشتر به صورت پراکنده می باشد و جستجو در وب بهترین راه می باشد
      ولی می تواند گفت منابع آموزشی ویدئویی سریع تر هستند و درک بهتری به شما می دهند
      اگر قصد مهاجرت به اکشن اسکریپت ۳ را دارید پیشنهاد می کنم این مقاله را مطاله کنید

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

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

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

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه