Добавлен код, размер swf стал ... меньше?
-
04-07-2019 - |
Вопрос
...Я работаю над парой теорий, но мне интересно услышать другие мнения.
Это было проверено на трех разных машинах, двух под управлением Windows и другой под управлением Linux.Используемый компилятор - flexbuild (предположительно mxmlc) и ant с mxmlc.
Мы добавлено код для небольшого автономного проекта с одним файлом .as и размер скомпилированного swf-файла уменьшились на 20 КБ, с 32 КБ до 12 КБ в Linux box.Немного отличается в Windows box, с 27 тыс. до 8,5 тыс.
С помощью специального инструмента мы убедились, что обе версии используют встроенное сжатие swf, никаких массивных дополнительных метаданных, единственной модификацией сценария сборки ant является Добавить swc-файл для сборки.
Никакого удаления кода (никаких удалений импорта, никаких удалений переменных, nada), только добавление, и при этом довольно простое: пара компонентов добавлена на сцену, включена, пара небольших функций и т.д., Циклы не изменены, ничего очевидного, что привело бы к уменьшению объема кода.
Использование системы управления версиями для сборки старой версии по-прежнему приводит к увеличению размера файла, поэтому не похоже, что это изменение в библиотеках или компиляторе.
Ни один код не использует компоненты Flex, просто прямой импорт типа "flash.etc ...".
Кто-нибудь видел подобное поведение?Как вы думаете, что может быть причиной этого?
Решение
Я уже видел подобное поведение в сборках .NET раньше.
Мое предположение об этом поведении (где бы оно ни происходило) заключается в том, что все, что добавляется, позволяет компилятору выполнять большую оптимизацию, чем это могло быть ранее.
Почему это может быть, потребовало бы гораздо более подробного знания внутренней работы компиляторов, чем у меня есть (и почему это может происходить - если это действительно причина здесь - в вашем случае, вероятно, может быть полностью адекватно объяснено только инженером Adobe).
Другие советы
Я просто предполагаю, но когда дело доходит до файлов такого размера, может быть, вы видите провисание секторов жесткого диска?
Мое первое предположение состояло бы в том, что первый swf-файл был скомпилирован в режиме отладки, который добавляет кучу информации.Если это не так, то я бы предположил, что второй вариант был скомпилирован с помощью -optimize= true .
Но если ни то, ни другое не так, то это действительно так очень интересно!
Я тоже видел такое же поведение раньше.Я предполагаю, что это сочетание двух факторов:оптимизация и сжатие.Возможно, ваш новый код позволяет оптимизатору делать что-то по-другому (или, неинтуитивно, предотвращает какое-то встраивание или развертывание цикла, которое он делал раньше).Я бы сказал, что более вероятно, что присутствующие дополнительные данные сделали его лучшим кандидатом для сжатия, поскольку все flash-файлы сжимаются, поэтому его сжатие было более эффективным.Обе теории - всего лишь полуобразованные догадки.