Flash Ripper RSS Readers

Strille Flash XML Compressor: сжатие XML для ускорения процесса загрузки во Flash

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

Mattias Strindsman (более известный как Strille) изобрел, как ускорить загрузку XML за счет сокращения его размера (сжатия) в несколько раз. Очевидцы первых сжатий утверждают, что XML-файл размером в 225Кб был сжат до 16Кб, а затем успешно загружен и правильно обработан во Flash-приложении.

По порядку:

  1. Сначала XML-файл сжимается по алгоритму LZ77 написанной Strillе программой Flash XML Compressor. Данный метод хорош тем, что позволяет затем быстро декодировать XML во Flash-приложении;

  2. Чтобы декодирование сжатого XML стало возможным, в прототип объекта XML вписывается правильный парсер, который и справляется с задачей быстрого декодирования XML по LZ77.

AS1-Код парсера:

XML.prototype.parseXMLStandard = XML.prototype.parseXML;
XML.prototype.parseXML = function(i) {
if (i.charAt(0) != '<') {
var ecPos = i.indexOf(" ")+1;
var eC = i.charAt(ecPos);
i = i.substr(ecPos+1);
var o = "";
var iL = i.length;
for (var n=0;n<iL;n++) {
if (i.charAt(n) == eC) {
var p = i.charCodeAt(n+1)*114 + i.charCodeAt(n+2) - 1610;
var l = i.charCodeAt(n+3)-14;
o += o.substr(-p, l);
n += 3;
} else {
o += i.charAt(n);
}
}
this.parseXMLStandard(o);
} else {
this.parseXMLStandard(i);
}
}

На сайте автора выложена программа для сжатия XML -- Flash XML Compressor (Zip, 14 Кб). Для ее работы нужна установленная Microsoft .Net Framework.

Чтобы сжать XML-файл, просто перетащите его на иконку или окно приложения Flash XML Compressor. Не забудьте заглянуть в опции программы и на домашнюю страницу Flash XML Compressor

// via Strille Tutorials

Писал Rost, 18 Июнь 2004 12:21

Найдены баги:

Вот это интересно! И ведь, на поверхности лежало!

C2 - 18 Июнь 2004 15:44

ИМХО, эта вестчь станет полезнее процентов на 1000 если сделать сжималку в виде php-шной библиотеки и продумать сжатие потока. Статических, редкоизменяемый xml - слишком частная задача, сжимать ручками запаришься. Самые сложные и большие XML строятся по данным из БД. В конце концов, если речь идет о библиотеке разжатия и формате компактного хранения структурированных данных, то таких форматов существует масса, и они не частные, а стандартные для индустрии...

Смольный - 19 Июнь 2004 22:29

Смольный, это прекрасная идея. Думаю, PHP-программисты могли бы взять ее на вооружение!

Голос из зала - 19 Июнь 2004 22:32

ай... а кто php класс или функцию напишет?

Migel - 19 Июнь 2004 23:47

чё за Microsoft .Net Framework.

Ivan - 21 Июнь 2004 14:16

помнитсая в марте нарисовался вот такой солюшн подобной проблемы:
поскольку большинство броузеров нормально понимает GZIP'ованый контент то не париться и гзиповать...
а флеш все равно сам не качает, т.ч. броузер ему все сольет, распакует и скормит нормальный ХМЛ.
тестилось только под окнами, но мне больше и не надо было.

#
# можно пользовать стандартный: ob_start("gz_handler");
# но поскольку это слишком высокоинтелектуальная штука, для тестов она не подходит.
# //gz_handler сам решает можно ли паковать контент в зависимости от версии броузера
# // и HTTP ... или от Accept-Encoding, это ему как бог на душу положит
#
# потестить можно зафорсив упаковку таким макаром (писано под php 4.3.x):
# размеры жатого и нежатого файлов можно посмотреть в хедерах.
#
# проблема будет под ИЕ, ежели юзать HTTP/1.0 через прокси.
# для нормальной работы ИЕ нужно переключить в HTTP/1.1
#
# если что - спрашивайте меня в ruFlash'е :)
#

[php]
if (!isSet($mode)) $mode = 0;

$XML = file_get_contents("./test.xml");
header("X-size-real: ".strlen($XML));

if ($mode==1)
{
$XML = gzencode($XML);
header("X-size-gzipped: ".strlen($XML));
header("Content-Encoding: gzip");
}
Header("Content-type: text/xml");
echo "$XML";
[/PHP]

pietrovich - 21 Июнь 2004 22:04

З.Ы.: идея успешно юзается для внутренних нужд. насколько она жизнеспособна под nix'ами и на mac'е не знаю.
можно конечно написать на ПХП упаковщик под этот прототип, но распаковываться жатый контент средствами флеша будет ГОРАЗДО медленне чем средствами ОСи/Броузера

pietrovich - 21 Июнь 2004 22:17

Во! Очень разумная мысль - gzip... Браузеров таких что не понимают - мало. А для них можно оставить и версию файла (вариант-скрипта) который жаться не будет...

Смольный - 21 Июнь 2004 22:29

Петрович, ты хорошо соображаешь!

Голос из зала - 22 Июнь 2004 14:11

>А для них можно оставить и версию файла (вариант-скрипта)

я для себя планировал поступать так:
перед первой загрузкой нужных данных проверяем соединение. тупо скачиваем короткий test.xml принудительно погзипаный. затем если он пришел покореженый или оборвался по таймауту, значит броузер тупой и ГЗИП не понимает. соответственно все дальнейшие загрузки нужно производить без сжатия. например добавля в GET usegzip=0 или поросив сервер навесить юзеру печеньку с usegzip=0...
ну а после проверки гзипать все если директивы этого не делать НЕТ.

только вот за отсутствием надобностив такой проверке я ее не делал. просто в моей ситуации гзипаный ХМЛ будет отдаваться в проверенные руки с которыми проблем с "я ГЗИПа не понимаю" просто не будет...

pietrovich - 22 Июнь 2004 20:28

Блин!
чуть не забыл :)))
кроме РАЗМЕРА файла, немаловажную роль играет кеширование :)

можно решать через
ETag и затем проверку If-None-Match. в etag пишем md5-хеш...

все. теперь не нужно добавлять всякие ?rnd=239848347, если файло не изменилось на сервере будет браться из кеша. причем каждый раз перед тем как взять броузер ОБЯЗАТЕЛЬНО поинтересуется можно ли ;)

выглядит примерно так (встявляем сразу после загрузки XML'я в пхп):
[php]
$eTag = md5($XML);
$useCached = isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']) ? stripslashes($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']) : false;
$useCached = $useCached ? ($useCached === $eTag) : false;
header ("Expires: 11 Jun 1970 19:00:00 GMT");
header ("Pragma: no-cache");
if ($useCached)
{
header("HTTP/1.0 304 Use Cached Copy");
Header("ETag: ".$eTag);
exit;
}
else
{
Header("HTTP/1.0 200 Ok");
Header("ETag: ".$eTag);
header ("Cache-Control: private, must-revalidate");
}
[/php]

pietrovich - 22 Июнь 2004 20:58

Очень интересно. Надо будет попробовать.

DeadMorozz - 9 Июль 2004 14:54

Спасибо Петровичу за наше счастливое детство!

IvanRed - 11 Июнь 2006 17:04



Это запись из категории 'Coding'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)