Добавлен код, размер swf стал ... меньше?

... Я работаю над парочкой теорий, но мне интересно услышать другие мнения.

Это было проверено на трех разных машинах, двух окнах и другом Linux. Используемый компилятор - это flexbuild (предположительно mxmlc) и ant с mxmlc.

Мы кодируем добавлен в небольшой автономный проект с одним файлом .as, и размер скомпилированного SWF-файла уменьшился на 20 КБ, с 32 КБ до 12 КБ в Linux. Немного по-другому на windows box, от 27к до 8,5к.

С помощью специального инструмента мы проверили, что обе версии используют собственное сжатие swf, без массивных дополнительных метаданных, единственная модификация скрипта сборки ant - это добавлять, файл swc для сборки.

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

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

Ни в одном коде не используются компоненты Flex, только прямой импорт типа «flash.etc ...».

Кто-нибудь видел подобное поведение? Как вы думаете, что может вызвать это?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
505
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы уже видели подобное поведение в сборках .NET.

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

Почему это может потребовать гораздо более подробных знаний о внутренней работе компиляторов, чем у меня (и почему это может происходить - если это на самом деле причина здесь - в вашем случае, вероятно, может быть полностью адекватно объяснено только Adobe инженер).

Это в значительной степени и наше текущее предположение. Кроме того, в коде, который мы импортируем, могут быть циклы, но на самом деле у нас нет никаких циклов, все это связано с очень небольшим количеством реальных событий. Мы добавили таймер для использования при проверке тайм-аута.

Aaron H. 27.10.2008 23:26

Я просто догадываюсь, но когда дело доходит до таких маленьких файлов, может быть, вы видите провисание в секторах жесткого диска?

Это не приведет к разнице более чем в 4 КБ (это максимальный нормальный размер кластера на NTFS-диске). Кроме того, тот факт, что разница в 20 КБ между разными операционными системами, позволяет сделать вывод, что это связано с флэш-памятью, а не с системой.

TheSmurf 27.10.2008 22:45

Мики, это одно из первых мест, куда можно было бы заглянуть. Я не уточнил, что мы это исключили. Для других я не думаю, что этот ответ оправдывает голосование "против".

Aaron H. 28.10.2008 02:04

Моя первая догадка заключалась в том, что первый swf был скомпилирован в режиме отладки, что добавляет кучу информации. Если это не так, я бы предположил, что второй был скомпилирован с -optimize = true.

Но если ни то, ни другое не соответствует действительности, очень действительно интересен!

Это тоже не так, единственной модификацией флагов сборки было добавление файла библиотеки swc.

Aaron H. 27.10.2008 23:23

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

Другие вопросы по теме