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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.02.2010, 16:15
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 1  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
По умолчанию Оптимайзинг

Вот взялся оптимайзить написанное.
Цель - добиться уменьшения размеров swf без ущерба функциональности.

Обратил внимание на такую вещь:
В языках программирования, разработанных не индусами, часто повторяющийся код собирают в кучу и выносят в отдельные блоки, называемые подпрограммами (во времена Брежнева) или функциями (процедурами).

А поскольку АС3 не относится к таковым, вынося повторяющие наборы строк в отдельную функцию, получаем увеличение размера swf-файла.

Или, вот такой пример: по тексту я использую присваивание myUrl="http://myUrl" в нескольких местах. Чтобы не менять везде по тексту содержимое myURL в случае необходимости, вынес значение myURL в отдельную переменную mainURI:String="http://myUrl" и теперь в тексте использую присваивание myURL=mainURI. И получаю увеличение размера swf против того, как если бы не использовал mainURI.

Может я не ту религию исповедую ?
Кто какие методы использует ?

P.S. нашел полезный материал по теме http://lurkmore.ru/%D0%98%D0%BD%D0%B...BA%D0%BE%D0%B4

Старый 21.02.2010, 16:57
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
В HaXe есть inline, но это скорее на производительность влияет, на объем кода - не особенно, даже, скорее, в худшую сторону. А вообще зависит от многих факторов, отдельная функция добавит байткода на ее описание, например, но если размер функции много больше ее описания, а используете вы ее неоднократно, то, конечно, стоит ее делать отдельной функцией.

Да, и еще, флеш в большинстве случаев ищет свойства по имени (т.е. традиционно в других языках свойства это - номера), поэтому длинные имена полей класса (но не локальных переменных) тоже влияют на размер. Но это ни в коем случае не повод для того, чтобы не писать нормальные названия оптимизируйте что-нибудь другое.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 21.02.2010 в 17:04.
Старый 21.02.2010, 17:15
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 3  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
Ради спортивного интереса маленький эксперимент провел:
есть класс
Код AS3:
package 
{
	import flash.display.Sprite;
	public class TestConst extends Sprite
	{
		//private static const str:String = "world";
		public function TestConst():void
		{
		}		
		public function method1():void
		{
			var s:String = "hello" + "world";
		}
....повторить еще 5 раз... 
		public function method7():void
		{
			var s7:String = "hello" + "world";
		}
компилим mxmlc TestConst.as получаем - 733 байта, а если везде заменить слово "world" на константу - private static const str:String = "world" => str - то получаем 730 байт (от 730 до 734, по-разному)

Но это все конечно ерунда, ради хорошего дизайна всегда лучше использовать константы, дабы избежать "Magic Strings" ,)

Тоже самое по второму пункту, сделал отдельный класс, вынес туда функционал, скомпилил compc -source-path . -include-classes MyClass -output test.swc, присоединил к основной программе, результат тот же по размеру, что и напрямую иметь этот класс.

Старый 21.02.2010, 17:59
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 4  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Надо учитывать, что весь swf после компиляции пакуется. Поэтому одинаковые функции займут примерно как одна. И три байта - не показатель, эта разница может быть чисто за счёт разной даты компиляции (при каждой компиляции одинакового кода всегда есть разброс в несколько байт).

Старый 21.02.2010, 18:05
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 5  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
ps_spectre, интересно.

Я делаю проекты в CS4.

Тут, кстати, еще нашел такую весчь: если скопипастить весь текст из файла main.as, затем создать новый Flash File AS3 и вставить текст в него, затем скомпилить, то размер получается байт на 100 меньше, чем в прежнем файле, где я делал многочисленные отладки, дописки/переписки...

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

P.S. История для поднятия настроения
Когда-то давно я отлаживал в институте преподу программу его диссертации. Дело было на Фортране. Чуть более 100 тысяч строк. Оно нифига не хотело работать. И вот однажды, когда я искал причину "неработы" софтины, вставляя промежуточные print для проверки, случайно обнаружил, что если вставить в определенном месте программы пустой print, то все начинало работать прекрасно....

С тех пор не перестаю удивляться тому, как на двух разных компах в одинаковом софте получаются разные результаты

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

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
VVall, бесспорно ,)
На мое мнение, парится на счет пары десятков килобайт (в лучшем случае на проект, и то, не факт что вообще размер увеличится), пытаясь "оптимизировать" за счет многократного ухудшения читабельности кода (не использовать констант для "магический чисел,строк", писанина в одном файле, не разбивать систему на классы, не выносить одинаковый функционал в библиотеку и т.д.) бессмысленно. ))

вообщем, wvxvw первым постом в теме все в принципе сказал

Добавлено через 5 минут
Crenth, посмотрите в сторону Flex SDK - это бесплатная весчь, в нем есть компилятор mxmlc (as -> swf) и compc (as -> swc)
статейка для разгона

з.ы. Сам КС4 не использую, пробовал скачать 30-дневную триал версию, посмотрел, не понравилось абсолютно, какое-то психологическое отвращение к этому инструменту, мне, как программисту, нафиг не надо кс4, тем более, за него надо не мало денег платить. ) Как тут было на форуме кем-то сказано, flex sdk + flash develop = нормальный такой "бомж" пакет, ) а для графики связка GIMP + Inkscape + blender))) Ну это не по теме, да )


Последний раз редактировалось ps_spectre; 21.02.2010 в 18:19. Причина: теги
Старый 21.02.2010, 18:23
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 7  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
ps_spectre,
оно конечно вы правы все.

Однако, проблема современного программерства в том, что никто не парится над оптимайзингом. Гигагерцы процессоров и гигабайты мозгов пережевывают даже индусский код.
В лихие перестроечные времена приходилось выгонять каждый лишний килобайт памяти в HighMem, чтобы написанная софтина могла больше.
Счаз конечно пипл себя чувствует вольготно. Поставил Suite, которая в архиве инсталлятора занимает Гиг !!!, установил. Работаешь. Скомпилил проект. Какая разница, будет его юзер качать 2 секунды через DSL или 32. Его проблемы...
Дальше будет хуже, поверьте

Я себя отношу к индейцам, а не к индусам. Поэтому и парюсь над темой...


Последний раз редактировалось Crenth; 21.02.2010 в 18:29.
Старый 21.02.2010, 18:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Круто. А ещё скажите художнику, чтобы следил за цветами - они должны быть именно такими, какими должны быть, без +- 1 к номеру цвета.

FlexSDK наилучшее решение, только вот недавно был случай - компилю проект, на локале всё зашибись - но как уходит флешка в нетворк - так крашится, эксепшны, все дела. В браузере на локале тоже работает. Оказалось дело в embed шрифте - убрал его и он заработал. До сих пор сам не верю.

По теме - ну выжмите вы даже 5% сокращения кода в проекте - это не то. Ужимать надо видео/звук/графику, если вам нужен размер, но никак не код.

Старый 21.02.2010, 19:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Оптимизацией должен заниматься препроцессор и компилятор (ну, если не считать клинических случаев). AS3 компилятор тут, правда, особо не блещит, но, если вы прям уж так задались целью оптимизировать - оптимизируйте байткод / пишите постпроцессор. На том этапе, на котором вы это пытаетесь сделать - это искать черную кошку ночью в темной комнате
__________________
Hell is the possibility of sanity

Старый 21.02.2010, 19:04
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 10  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
флешка сжимается zip или чем то подобным, так что сжимайте графику и не страдайте ерундой))

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

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

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


 


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


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