![]() |
Загрузка и разбор большого количества данных.
В флешку нужно загрузить инфу. Количество позиций около 30 тысяч. У каждой позиции 5-10 свойств. Для теста попробовал XML. Понятно что грузится очень долго. В вебе использовать не собираюсь. Среда - локальная сеть)
Подскажите пожалуйста, что можно использовать для этого? Знаю есть какой-то loadvars? Есть ли вариант грузить и разбирать файл побайтно? Так же подошел бы вариант, с зашивкой данных уже внутрь флешки. Данные меняются крайне редко. Подскажите насколько сильно эти способы различаются по скорости разбора и про особенности. Может посоветуете что? |
Сталкивался со схожей проблемой, правда позиций было не 30 000 а 5 000 :)
Каждую позицию вынес в отдельный xml и сделал еще один xml в котором были тупо перечислены имена файлов (по сути - айдишники). При парсинге списка тормозов не возникало, остальное подгружал по мере необходимости. Сначала сдуру сделал перекидывание всех айдишников в массив, потом дошло, что XMLList - тоже вполне себе массив, и ничего лишнего тут городить не надо. Главное сохранить на него ссылку, чтобы он не строился каждый раз. Код AS3:
|
Данные, зашитые во флешку будут ближе к ней, чем загружаемые посредством loadVars, поэтому, если данные не меняются, то лучше зашивать.
Разбирать данные побайтно конечно можно, но это будет достаточно медленно и для этого придется писать свои алгоритмы. Тут лучше использовать че-то типа array.join() при записи и string.split() при разборке |
Если все локально, то AIR + SQLLite, бинарные данные тоже без проблем (ByteArray). Если запихивать внутрь, то каждая позиция отдельный объект (типизированный), всё загнать в Vector с фиксированной длинной (хотя мнения расходятся, дает ли это ощутимый прирост скорости). Самый быстрый вариант зашить во флешку (нет необходимости парсить данные). Насчет скорости бинарника и базы данных, зависит от того как у вас организован доступ к данным (все скопом или порциями).
|
Если данные меняются крайне редко - делаем примерно следующее:
http://www.flashdevelop.org/communit...=5856&start=15 Если в двух словах: сериализуем данные либо в Array, либо в какую-нибудь другую коллекцию по желанию (их правда, всего-то по-настоящему XMLList и Object, Vector и Dictionary не сериализируйтся). и либо встраиваем непосредственно во флешку, либо FileStream.open() либо URLLoader / URLStream загружаем. Более продвинутый вариант - создать свою структуру данных и ее сериализовать используя IExternalizable... |
30К+ объектов всегда будут тормозить при парсинге.
FileStream (AIR only) Я к тому, что не загрузка, а парсинг занимает время. |
Для парсинга можно и прогрессбар сделать, главное чтобы флэшка не подвешивала систему на несколько секунд, как это бывает если бездумно влепить цикл.
|
| Часовой пояс GMT +4, время: 00:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.