Да поговорим за ActionScript...

2 отговора 86 прегледа
#1

Да поговорим за ActionScript...

Здравейте

Знаем че форматът .swf e с отворен код, което дава възможност да се разбере нещо повече за ActionScript и начинът по които той се изпълнява/компилира и т.н...както и да откраднем/видим нечий код с помощта на декомпилиращи инструменти ( ActionScript Viewer например ). И тъй като целта на тази тема е друга - спирам дотук.
Доста от нас са се сблъсквали с нещо от рода на "Кодът във филма забавя компютъра ви! Желаете ли да се прекъсне изпълнението?" или "Прехвърлихте ограничението от 200 000 actions в фрейм..." и т.н. Но дори и да не получим подобни "честитки" трябва винаги да имаме едно наум, когато пишем скриптовете си! Още повече че player-ът за Mac е по-бавен от този за РС.
ActionScript е разделен на отделни блокове, които се изпълняват от нацхало до край, никакво събитие или .goAndPlay() няма да прекъсне изпълнението на останалия код в съответния блок. Това е и причината, поради която един прекалено дълъг for(){} цикъл ще накара player-а да увисне и екрана няма да се актуализира...Никак не е лесно да се определи какво точно предизвиква дадено забавяне. По принцип математическите функции, включително и тези за числа с плаваща запетая ( 3,14.... ) не създават проблеми. Използването на Flash 5 синтакс е доста удобно или поне аз го предпочитам, но е по-бавно за изпълнение. Класически пример : mc.gotoAndStop(6); е около 25 пъти по-бавно от tellTarget(mc){ gotoAndStop(6);} ! Затова, когато изводът на екрана зависи от сложни изчисления, 3D симулации например, използвайте flash 4 синтакс т.е пишете ../:променлива вместо _parent.променлива, а също така getProperty() и eval().
Тези, които в момента си казват "Абе ти хубаво си плямпаш, ама от съображения за съвместимост използването на тези actions не се препоръчва!", нека хвърлят едно око на най-долните редове...Та, докъде бях стигнал...аха...Също така добър навик е в функциите да декларирате локални променливи - те са "по-бързи". За нещастие имената на променливите също играят роля, затова е добре да избираме по-кратки, но все пак смислени имена. Предишното важи и за вградените функции. Например:
t = Math.tan и заменянето на Мath.tan с t на всички места в скрипта. Това играе ролята на нешо като shortcut, но работи само за Flash 5 методите и функциите! При използването на Flash 4 функции като ord(), създавайте низовете си с a="рфгрфг", Flash 5 методите се "държат" по-добре ако създавате низовете с a=String("рфгрфг"). Изглежда че Flash player-а извършва допълнително преобразуване на низовете в обекти и обратно- обектите в низове, когато се налага ( пробвайте следното: trace ("ererf".substring(2,1)); )...и естествено това си има своята цена. Все пак избягвайте използването на a=String("рфгрфг") в ключови места на кода. Някои String функции са бавни независимо по кой начин биват извиквани: String.split() е направо ужасна и sp=String.split няма да помогне... Още един пример: random() e по-бърза от Math.random()!
Следват няколко примера за оптимизация:

не оптимизирано
---------------------
b=a+10;
c=b*2;

оптимизирано
c=(b=a+10)*2;
//тук Flash ще използва регистър
---------------------

не оптимизирано
d=a*(b/n + c/n);
e=b*(b/n + c/n);

оптимизирано
t=(b+c)/n;
d=a*t;
e=b*t;
---------------------

не оптимизирано
for(i=0;i<10;i++){
if(a!=0){
vashaFunkciq(i*10);
}
}

оптимизирано
d=vashaFunkciq;
if(a){for(i=0;i<100;i+=10){d(i);}}
---------------------

не оптимизирано
for(i=0;i<x.length;i++){
x*=math.PI*Math.cos(y);
}

оптимизирано
len=x.length;
pc=Math.PI*Math.cos(y);
for(i=0;i<len;i+=2){
x*pc;
x[x+1]*=pc;
}

В никакъв случай тази не може да се смята, че това е всичко...сигурен съм има още доста неща за добавяне, за които и представа си нямам.

Винаги когато някой използва Flash 4 синтакс ще се намерят хора, които да кажат че това не се препоръчва и е лош навик и трябва да се избягва...Едва ли Flash 6 player-а ще отказва да работи с файлове от версии 4 и 5 на програмата. Ами милионите сайтове направени с Flash, които никога няма да се актуализират? И колко време ще е нужно на Flash 6 player-a, за да достигне до поне 90% от браузърите? Така че нека не се тревожим за "лошия навик"! В никакъв случай не трябва да избягваме Flash 5 синтакса! Използването на Flash 4 "правопис" става логично само там където скоростта е от значение...

П.П Съдържанието на тази тема се основава на съвети, мнения, препоръки и заключения на "приятели по поща", както и на лични наблюдения!


|Не се изказвай за неща, които не разбираш|
Отговор
в отговор на moonjogger #2

Re: Да поговорим за ActionScript...

abre moonjogger4e,

6to mi razwalq6 sega rahatlaka takmo sam si izgradil nekwi nawici i sa .... pak nanowo .... majtap de

tia saweti sa mnogo polezni dano nekak si uspeq da gi wkaram w plitkata si 4erepna kutiq

fLaSH iT
Отговор
в отговор на mucho #3

podcenqvash se

Zdrasti
ne se podcenqvai...v nachaloto i az misleh che imam plitka cherepna kytiq...no moje i da sym bil prav

|Не се изказвай за неща, които не разбираш|
Отговор