|
|
|||||
[+1 19.06.10]
[+1 27.07.10] Регистрация: 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 |
|
|||||
Modus ponens
|
В HaXe есть inline, но это скорее на производительность влияет, на объем кода - не особенно, даже, скорее, в худшую сторону. А вообще зависит от многих факторов, отдельная функция добавит байткода на ее описание, например, но если размер функции много больше ее описания, а используете вы ее неоднократно, то, конечно, стоит ее делать отдельной функцией.
Да, и еще, флеш в большинстве случаев ищет свойства по имени (т.е. традиционно в других языках свойства это - номера), поэтому длинные имена полей класса (но не локальных переменных) тоже влияют на размер. Но это ни в коем случае не повод для того, чтобы не писать нормальные названия оптимизируйте что-нибудь другое.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 21.02.2010 в 17:04. |
|
|||||
Ради спортивного интереса маленький эксперимент провел:
есть класс 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"; } Но это все конечно ерунда, ради хорошего дизайна всегда лучше использовать константы, дабы избежать "Magic Strings" ,) Тоже самое по второму пункту, сделал отдельный класс, вынес туда функционал, скомпилил compc -source-path . -include-classes MyClass -output test.swc, присоединил к основной программе, результат тот же по размеру, что и напрямую иметь этот класс. |
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
Надо учитывать, что весь swf после компиляции пакуется. Поэтому одинаковые функции займут примерно как одна. И три байта - не показатель, эта разница может быть чисто за счёт разной даты компиляции (при каждой компиляции одинакового кода всегда есть разброс в несколько байт).
|
|
|||||
[+1 19.06.10]
[+1 27.07.10] Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
ps_spectre, интересно.
Я делаю проекты в CS4. Тут, кстати, еще нашел такую весчь: если скопипастить весь текст из файла main.as, затем создать новый Flash File AS3 и вставить текст в него, затем скомпилить, то размер получается байт на 100 меньше, чем в прежнем файле, где я делал многочисленные отладки, дописки/переписки... Значит, какие-то фантомы остаются по ходу пьесы. Наверное, это один из факторов, который при счастливом стечении обстоятельств проявляется как "необъяснимый глюк" программы P.S. История для поднятия настроения Когда-то давно я отлаживал в институте преподу программу его диссертации. Дело было на Фортране. Чуть более 100 тысяч строк. Оно нифига не хотело работать. И вот однажды, когда я искал причину "неработы" софтины, вставляя промежуточные print для проверки, случайно обнаружил, что если вставить в определенном месте программы пустой print, то все начинало работать прекрасно.... С тех пор не перестаю удивляться тому, как на двух разных компах в одинаковом софте получаются разные результаты |
|
|||||
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. Причина: теги |
|
|||||
[+1 19.06.10]
[+1 27.07.10] Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
ps_spectre,
оно конечно вы правы все. Однако, проблема современного программерства в том, что никто не парится над оптимайзингом. Гигагерцы процессоров и гигабайты мозгов пережевывают даже индусский код. В лихие перестроечные времена приходилось выгонять каждый лишний килобайт памяти в HighMem, чтобы написанная софтина могла больше. Счаз конечно пипл себя чувствует вольготно. Поставил Suite, которая в архиве инсталлятора занимает Гиг !!!, установил. Работаешь. Скомпилил проект. Какая разница, будет его юзер качать 2 секунды через DSL или 32. Его проблемы... Дальше будет хуже, поверьте Я себя отношу к индейцам, а не к индусам. Поэтому и парюсь над темой... Последний раз редактировалось Crenth; 21.02.2010 в 18:29. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Круто. А ещё скажите художнику, чтобы следил за цветами - они должны быть именно такими, какими должны быть, без +- 1 к номеру цвета.
FlexSDK наилучшее решение, только вот недавно был случай - компилю проект, на локале всё зашибись - но как уходит флешка в нетворк - так крашится, эксепшны, все дела. В браузере на локале тоже работает. Оказалось дело в embed шрифте - убрал его и он заработал. До сих пор сам не верю. По теме - ну выжмите вы даже 5% сокращения кода в проекте - это не то. Ужимать надо видео/звук/графику, если вам нужен размер, но никак не код.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Modus ponens
|
Оптимизацией должен заниматься препроцессор и компилятор (ну, если не считать клинических случаев). AS3 компилятор тут, правда, особо не блещит, но, если вы прям уж так задались целью оптимизировать - оптимизируйте байткод / пишите постпроцессор. На том этапе, на котором вы это пытаетесь сделать - это искать черную кошку ночью в темной комнате
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 16:47. |
|
« Предыдущая тема | Следующая тема » |
|
|