Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.05.2006, 14:29
heilong вне форума Посмотреть профиль Отправить личное сообщение для heilong Посетить домашнюю страницу heilong Найти все сообщения от heilong
  № 1  
Ответить с цитированием
heilong
 
Аватар для heilong

Регистрация: Dec 2005
Адрес: Moscow
Сообщений: 84
Отправить сообщение для heilong с помощью ICQ
По умолчанию Оптимизация для скорости в общем

Предлагаю обсудить техники оптимизации actionscript кода (меня конкретно интересует Flash 8) для скорости. Постоянно вижу обсуждения оптимизации размера файла, куча информации на эту тему, а про скорость не нашёл ничего. Если плохо искал, сорри.

В любом случае для некоторых целей тема очень актуальна и хотелось бы собрать базу знаний по этому поводу. Неплохо было бы написать в итоге некую документацию, заметки на тему оптимизации.

В качестве примера - я сейчас активно занялся написанием 3d движка на 8м флэше. Всяких разных фич в большом кол-ве я не хочу, но, в отличии от других движков с миллионом мулек, что я видел, обязательно нужно текстурирование и освещение (не flat как во всех движках что я видел, а Gouraud). Собственно, технический вопрос этого дела я вчера разрешил, откуда и возникло желание эту тему поднять. Дело в том, что функцию, которая за 5 секунд текстурировала и закрашивала всего 6800 треугольников, удалось оптимизировать (алгоритм остался неизменным) до скорости 80000 треугольников в секунду, в процессе я открыл для себя, что, казалось бы, несложная операций Matrix.createGradientBox - очень тормозная, также очень медленно прочитать property MovieClip.transform, а из него - colorTransform и matrix. Подробности в моём посте на эту тему:
http://www.flasher.ru/forum/showthread.php?t=79791

Вот такие вот детали я и предлагаю собрать в список. Какие функции и property тормозные и как это обойти.
Ну и конечно просто технологии оптимизации, свойственные именно flash-у. Всякие loop unrolling и другие общие техники тоже интересно, но уже на 2м плане.


Последний раз редактировалось heilong; 31.05.2006 в 14:32.
Старый 31.05.2006, 21:31
orangeline вне форума Посмотреть профиль Отправить личное сообщение для orangeline Найти все сообщения от orangeline
  № 2  
Ответить с цитированием
orangeline

Регистрация: Apr 2006
Сообщений: 88
сам с такой жёсткой оптимизацией по скорости не сталкивался ввиду отсутствия необходимости таковой, но слышал. - генерируемый as байт-код является избыточным и если из него убрать (утилитой flasm) лишнее то + 20-30% скорости

Старый 31.05.2006, 22:14
Bkmz вне форума Посмотреть профиль Отправить личное сообщение для Bkmz Посетить домашнюю страницу Bkmz Найти все сообщения от Bkmz
  № 3  
Ответить с цитированием
Bkmz
 
Аватар для Bkmz

Регистрация: Jul 2003
Адрес: Екатеринбург
Сообщений: 153
Отправить сообщение для Bkmz с помощью ICQ
думаю не стоит подходить ограниченно для флеша. проанализировать ту или иную функцию, цикл, как он работает(хотя бы навскидку). думаю некоторые выгодные замены будут бросаться в глаза(не будете же вы парсировать строку в архив по запятым регулярными выражениями+)))...

Старый 01.06.2006, 11:39
heilong вне форума Посмотреть профиль Отправить личное сообщение для heilong Посетить домашнюю страницу heilong Найти все сообщения от heilong
  № 4  
Ответить с цитированием
heilong
 
Аватар для heilong

Регистрация: Dec 2005
Адрес: Moscow
Сообщений: 84
Отправить сообщение для heilong с помощью ICQ
просто об оптимизации в общем есть много ресурсов и информации, а конкретно как лучше делать во флэше я нигде не нашёл.
или какие функции и property во флэше медленные и как это обойти.
flasm надо бы попробовать

Старый 01.06.2006, 12:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
первое что в голову пришло
Код:
/*
 *
 *	Пример : используемые внешние переменные внутри функции лучше передевать в качестве аргументов
 *
 */
v = 5;
////////////////////////////////////
function test1 () {
	var u = v;
}
function test2 (v) {
	var u = v;
}
////////////////////////////////////
t1 = getTimer ();
for (var i = 0; i < 100000; i++) {
	test1 ();
}
t2 = getTimer ();
trace (t2 - t1);
////////////////////////////////////
t1 = getTimer ();
for (var i = 0; i < 100000; i++) {
	test2 (v);
}
t2 = getTimer ();
trace (t2 - t1);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 01.06.2006, 12:25
KPaul вне форума Посмотреть профиль Отправить личное сообщение для KPaul Найти все сообщения от KPaul
  № 6  
Ответить с цитированием
KPaul
 
Аватар для KPaul

Регистрация: Nov 2005
Сообщений: 221
Также можно пособирать в инете быстрые ф-ции и использовать их вместо дефолтных. Например следующая ф-ция выполняется более чем на 50% быстрее чем встроенная Array.reverse();
Код:
function reverse(a:Array){
	var l = 0;
	var r = a.length-1;
	var t;
	while(l<r){
		t = a[l];
		a[l] = a[r];
		a[r] = t;
		++l;
		--r;
	}
}
Естественно длинна цепочки разрешения переменных(областей видимости), как сказал iNils может сильно влиять на производительность.
На самом деле очень много нюансов, начинаю от стиля написания кода и заканчивая течническими деталями(best practice).
Попробуй почитать тут, может чем-то поможет:
http://www.adobe.com/devnet/flash/ar...practices.html
http://www.adobe.com/devnet/flash/ar...practices.html

Старый 01.06.2006, 12:28
vooparker вне форума Посмотреть профиль Отправить личное сообщение для vooparker Посетить домашнюю страницу vooparker Найти все сообщения от vooparker
  № 7  
Ответить с цитированием
vooparker
 
Аватар для vooparker

Регистрация: Apr 2006
Адрес: Kursk, Russia
Сообщений: 523
Отправить сообщение для vooparker с помощью ICQ
Прошу прощения, что не в тему. Но.

iNils можешь объяснить одну вещь, исходя из примера test1 работает медленнее поскольку начинает искать по цепочке областей видимости значение v (если я правильно понимаю). Так вот после первого TestMovie в OutPut у меня вывалилось 1064 и 868 соответственно (что вполне логично). НО! Второй TestMovie мне выдал примерно одинаковый результат - 856 и 860, а третий - 823 и 852.

Собственно вопрос почему?
Сразу прошу прощения, если ответ на вопрос очевиден, но все же хотелось бы его увидеть.


Последний раз редактировалось vooparker; 01.06.2006 в 12:33.
Старый 01.06.2006, 12:28
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 8  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Мы тут как-то обсуждалди что С++ в десятки (сам посчитал) считает sin в цикле... вот... Я сделал так:
Вставил флэш во С++ и там считал это синус, а результат только передавал флэшу... и все довольные... (флэш, С, я ....)

Старый 01.06.2006, 12:49
heilong вне форума Посмотреть профиль Отправить личное сообщение для heilong Посетить домашнюю страницу heilong Найти все сообщения от heilong
  № 9  
Ответить с цитированием
heilong
 
Аватар для heilong

Регистрация: Dec 2005
Адрес: Moscow
Сообщений: 84
Отправить сообщение для heilong с помощью ICQ
iNils, у меня твой тест выдаёт
1553
1534
разница, пожалуй, несущественна

KPaul, в этом reverse видимо алгорит лучше, выбор лучшего алгоритма естественно нужно проводить сначала, до всяких оптимизаций, и в данную тему я думаю не входит. А ссылки интересные, читаю...

Скрипун, как это вставил флэш в C++?

Старый 01.06.2006, 12:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Мой первый пример оказался очень не удачным
Этот лучше
Код:
/*
 *
 *	Пример : используемые внешние переменные внутри функции лучше передевать в качестве аргументов
 *
 */
v = 5;
////////////////////////////////////
test1 = function () {
	var t1 = getTimer ();
	for (var i = 0; i < 100000; i++) {
		var u = v;
	}
	var t2 = getTimer ();
	trace ((t2 - t1) + " " + u);
};
test2 = function (v) {
	var t1 = getTimer ();
	for (var i = 0; i < 100000; i++) {
		var u = v;
	}
	var t2 = getTimer ();
	trace ((t2 - t1) + " " + u);
};
////////////////////////////////////
test1 ();
test2 (v);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:43.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.