Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка и разбор большого количества данных. (http://www.flasher.ru/forum/showthread.php?t=134288)

proxiServer 25.12.2009 16:18

Загрузка и разбор большого количества данных.
 
В флешку нужно загрузить инфу. Количество позиций около 30 тысяч. У каждой позиции 5-10 свойств. Для теста попробовал XML. Понятно что грузится очень долго. В вебе использовать не собираюсь. Среда - локальная сеть)

Подскажите пожалуйста, что можно использовать для этого? Знаю есть какой-то loadvars? Есть ли вариант грузить и разбирать файл побайтно?

Так же подошел бы вариант, с зашивкой данных уже внутрь флешки. Данные меняются крайне редко.

Подскажите насколько сильно эти способы различаются по скорости разбора и про особенности. Может посоветуете что?

Gaen 25.12.2009 16:29

Сталкивался со схожей проблемой, правда позиций было не 30 000 а 5 000 :)
Каждую позицию вынес в отдельный xml и сделал еще один xml в котором были тупо перечислены имена файлов (по сути - айдишники). При парсинге списка тормозов не возникало, остальное подгружал по мере необходимости.

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

Код AS3:

 
//очень плохо
 
for(var i:int = 0; i < xmlIndex.record.length(); i++)doSomething(xmlIndex.record[i]);
 
//правильно
 
var recordsList:XMLList = xmlIndex.record;
var listLength:int = recordsList.length();
 
for(var i:int = 0; i < listLength; i++)doSomething(recordsList[i]);


Himerets 25.12.2009 16:34

Данные, зашитые во флешку будут ближе к ней, чем загружаемые посредством loadVars, поэтому, если данные не меняются, то лучше зашивать.
Разбирать данные побайтно конечно можно, но это будет достаточно медленно и для этого придется писать свои алгоритмы. Тут лучше использовать че-то типа array.join() при записи и string.split() при разборке

alatar 25.12.2009 20:15

Если все локально, то AIR + SQLLite, бинарные данные тоже без проблем (ByteArray). Если запихивать внутрь, то каждая позиция отдельный объект (типизированный), всё загнать в Vector с фиксированной длинной (хотя мнения расходятся, дает ли это ощутимый прирост скорости). Самый быстрый вариант зашить во флешку (нет необходимости парсить данные). Насчет скорости бинарника и базы данных, зависит от того как у вас организован доступ к данным (все скопом или порциями).

wvxvw 25.12.2009 21:09

Если данные меняются крайне редко - делаем примерно следующее:
http://www.flashdevelop.org/communit...=5856&start=15

Если в двух словах: сериализуем данные либо в Array, либо в какую-нибудь другую коллекцию по желанию (их правда, всего-то по-настоящему XMLList и Object, Vector и Dictionary не сериализируйтся).
и либо встраиваем непосредственно во флешку, либо FileStream.open() либо URLLoader / URLStream загружаем.
Более продвинутый вариант - создать свою структуру данных и ее сериализовать используя IExternalizable...

dimarik 26.12.2009 02:15

30К+ объектов всегда будут тормозить при парсинге.

FileStream (AIR only)

Я к тому, что не загрузка, а парсинг занимает время.

Gaen 26.12.2009 06:46

Для парсинга можно и прогрессбар сделать, главное чтобы флэшка не подвешивала систему на несколько секунд, как это бывает если бездумно влепить цикл.


Часовой пояс GMT +4, время: 00:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.