Pull to refresh

Уменьшаем размер Flex приложения отвязывая фреймворк

Reading time2 min
Views2.2K
Flex приложение весит 500кб? Легко исправить!

Данная статья посвящается тому, как уменьшить размер Flex приложения не пользуясь никакой магией.
А конкретно — что такое RSL и что это дает.
Ну и пара слов про забивание гвоздей боингами.



Для начала в очередной раз определимся с понятиями Flex SDK и Flex приложения.

Flex SDK/Flex Builder/Flex приложение


Flex SDK — это open-source framework, написаный на языке ActionScript 3 для создания Rich Internet Applications
Link: http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK

Flex Builder — IDE для разработки на ActionScript 3, очень тесно соприкасающееся с Flex SDK.
Links:
Win/Mac: http://www.adobe.com/products/flex/
Linux: http://labs.adobe.com/technologies/flex/flexbuilder_linux/

Flex приложение — приложение, использующее Flex SDK.
Примеры Flex приложений можно посмотреть на том же flex.org

Сколько весит пустое Flex приложение


Создав пустое Flex приложение можно с удивлением заметить, что в publish версии оно весит порядка 176 килобайт.
Это происходит благодаря тому, что Flex приложение включает в себя часть Flex SDK.

<лирическоеОтступление>
Кстати, какие именно классы были включены в swf при компилляции и сколько они весят можно посмотреть в size report-е. Для этого достаточно добавить в свойства компилляции "-link-report size.xml". Например вот так:
Link report

И в папке bin-debug появится файл size.xml. Вид слабочитаем, но тем же excel-ем его можно обработать и просматривать.

Этот параметр так же можно выставлять и не для Flex приложений.
</лирическоеОтступление>

Уменьшаем размер, отвязывая framework


Сначала результат:
После достаточно простых действий приложение будет весить… 70 килобайт.
(не спешите совсем уж сильно радоваться и дочитайте до конца)

В эти 70 килобайт войдет только маленькая часть Flex SDK, которая занимается загрузкой framework* + ваш код.
(* — версия)

И этот размер не будет зависеть от того, какие Flex компоненты вы используете, а какие — нет.

Как это сделать:
Сделать это очень просто — в свойствах проекта выставляем Framework linkage — Runtime shared library (RSL). Не забывая оставить галочку «Verify RSL digest».
Enable rsl
Framework linkage указывает, как будет использоваться framework — либо он будет «встроен» в swf, либо будет жить отдельно.
Verify RSL digests дает плюшку ввиде кроссдоменности.

«Но ведь все равно будет грузиться еще какой-то framework»


Вот тут самое интересное. Этот файл содержит в себе львиную долю Flex SDK. И загрузится он всего один раз. C любого домена.
То есть если сферический Вася Пупкин откроет Flex приложение на сайте site.smth и в этом приложении использовалась отвязка фреймворка через RSL, то эта версия фреймворка у него прокешируется.
И если он откроет какое-то другое Flex приложение на другом сайте, использующее эту же версию фреймворка через RSL, то Flex SDK уже грузиться не будет.

Детали по RSL в хелпе:
http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_09.html

Ложка дегтя


Пользователю, если он открывает Flex приложение, использующее например Flex SDK версии 3.2.0.3958 через RSL первый раз — все равно прийдётся ждать загрузки.
Причем достаточно долго. Размер подписанного sdk — около 550 килобайт.

Здравый смысл


Не стоит использовать Flex SDK там, где он не нужен.

Или вы делаете Rich Internet Application, или утилитку для загрузки файлов на сайт. Если для второго случая использовать Flex SDK — это забивание гвоздей боингом.
Tags:
Hubs:
Total votes 48: ↑45 and ↓3+42
Comments40

Articles