Просмотр полной версии : Очень большая xml-ка
Здравствуйте
Есть карта
Данные - в хмл. Данных много. xml-ка весит 3 Mb
Есть вариант разбить ее на части - для каждой страны сделать отдельную.
Можно не грузить всю инфу сразу, а после клика на страну. Все остальные страны делать недоступны пока данные не загрузятся. После загрузки показывается инфа о данной странеъ
Но заказчик хочет: чтоб инфа грузилась и паралельно можно было работать с флешкой. Т.е. по которым странам инфа загрузилась, на те можно уже кликать и инфа сразу отображается, а по остальным еще грузится
Это возможно? Флешка тормозить не будет?
Да, это возможно (если разбить на страны).
Тормозить - не понятна формулировка. Ну, запустите ее на 468-ке, если нужно, чтобы тормозила %)))
А еще лучше повыбрасывать все лишнее из ХМЛ. В 3 Мб можно таааааакое кол-во инфы запихать...
И все же. Для всех стран пишу обработчики (например onRollOver меняется цвет страны).
Потом в новом цикле гружу инфу по странам (города, инфа по городам).
Так вот пока эта вся инфа грузится (с хмл), обработчики событий не работают.
А надо чтоб работали, ну хотя бы те, по которым данные уже загрузились.
Что для этого надо сделать?
Напоминаю, что
заказчик хочет: чтоб инфа грузилась и паралельно можно было работать с флешкой. Т.е. по которым странам инфа загрузилась, на те можно уже кликать и инфа сразу отображается, а по остальным еще грузится
Так вот пока эта вся инфа грузится (с хмл), обработчики событий не работают.
А надо чтоб работали, ну хотя бы те, по которым данные уже загрузились.
Что для этого надо сделать?А что вы сделали?
заказчик хочет: чтоб инфа грузилась и паралельно можно было работать с флешкой. Т.е. по которым странам инфа загрузилась, на те можно уже кликать и инфа сразу отображается, а по остальным еще грузится
лично я бы с такого сайта(или чего там у вас) сваили бы нераздумывая, ибо в нете я через пчелиный клик+. попробуйте убедить заказчика, что грамотнее дать посетителю выбор, что грузить, а что нет
Ну хоть какой-то упрощенный пример бы...
Ей богу, не могу понять что нужно было запихать в ХМЛ чтобы добиться таких размеров. Стран в мире всего около 130, ну, пускай на каждую страну нужно по 10 переменных по 8 байт каждая, ну и еще на оформление самого ХМЛя прибавим по 8 байт на страну и того 130*90 = 12К... откуда 3КК?
там же в хмл есть инфа по городам. а это текст. сколько городов на планете?
НУ, не знаю, самым приемлимым мне кажется вариант - чтобы флешка при клике на страну обращалась к серверному скрипту, передавала ИД кликнутой страны, и по приходе ответа показывала нужную информацию. По-другому, даже с очень быстрым и-нетом, если мне эта информация не жизненно необходима 3КК я бы не стал ждать...
НУ, не знаю, самым приемлимым мне кажется вариант - чтобы флешка при клике на страну обращалась к серверному скрипту, передавала ИД кликнутой страны, и по приходе ответа показывала нужную информацию. По-другому, даже с очень быстрым и-нетом, если мне эта информация не жизненно необходима 3КК я бы не стал ждать...
согласен
а как вообще можно обработать незагруженный xml? он до полной загрузки будет как минимум невалиден, т.к. не будет закрывающего (рутового) тега.
поэтому его надо разделить на несколько маленьких
Вот пример
В хмл данные по городам двух стран (для представления, что нужно запихнуть в хмл, чтоб он весил столько)
а как вообще можно обработать незагруженный xml?
не надо обрабатывать незагруженный xml
надо чтоб просто пока данные грузятся можно было наводить на карту, кликать..., без данных
Я вот думаю...
Если грузим рисунок в некий клип на сцене, а сбоку кнопки, то пока рисунок грузится, кнопки доступны, все нормально
Может хмл грузить в клип отдельный, как-то хитро...
или все-таки нельзя чтоб и данные с хмл грузились и наводить на элементы флешки можно было?
ау, я тут пример прикрепила
кому интересно можете взглянуть
дык элементы флэшки, на которые вы собираетель наводить строятся по данным из хмл. или нет?
нет!!!
В том то и дело!!!!
См. пример
Там просто кнопка на _root, с хмл-данными никак не связана, но пока хмл не загрузится, навести на нее нельзя. Т.е. навести можно, но не работает
Почему так происходит?
Ведь когда грузить не хмл-данные, а, например, рисунок - такого нет.
А у меня работает. До загрузки, во время загрузки и после загрузки.
Хм, вот выложила сюда
http://jalav.h17.ru/
У Вас какой флеш-плеер?
У меня 9-й
Поробовала настройки Publish Settings
Assess Network only
Access local files only
не помогает
в чем еще может быть загвоздка?
9-ка
Ссылку посмотрел, но у меня xml загружается быстрее, чем я успеваю что-либо сделать.
Странно :)
Выходит, что у Вас с сервера хмл загружается быстрее, чем локально
Локально Вы ж тестировали пример
А у меня работает. До загрузки, во время загрузки и после загрузки.
на сервере тот же пример и те же хмл-ки
Я закинула на сервер 10 хмл-ок, и во флеш подгружаю не 2, а все 10
Но самая большая все-таки первая
Так вот когда грузятся те маленькие, немного подтормаживает, но почти не заметно,
а первая у меня грузится секунды 3-4 и в это время кнопка недоступна
Я там еще текст поставила "Первая xml-ка грузится", чтоб было видно, когда она грузится http://jalav.h17.ru/
p.s. При наведении кнопка должна менять цвет с красного на серый
Локально я пользуюсь симулятором загрузки, который может замедлить скорость отдачи для тестирования медленных соединений.
ок, спасибо Вам, что попытались мне помочь
тут я вижу люди скачивают исходник, но без xml
xml тоже надо скачать и закинуть в ту же папку, что и swf (
swf грузит xml)
Результаты такие же, как и у iNils'a кнопка реагирует, единственное, в исходнике у кнопки instanceName не указан, а так все нормально.
Ну ладно, спасибо
Наверное это от компа зависит, сколько грузится хмл и тормозит ли при этом флеш
Просто хотелось узнать, стоит ли делать так, чтоб грузились все данные как бы в фоне и при этом можна было работать с флешкой.
Понимаю, что это немного нелогично, товарищ MrPoma правильно сказал
грамотнее дать посетителю выбор, что грузить, а что нет
но все же хотелось узнать теоретически, можно ли так делать
Вывод: так делать не желательно, потому что есть такие компы, как у меня (Атлон 1800), на которых в подобной ситуации флеш тормозит.:-)
еще все зависит от скорости соединения
да, но у меня и локально так же
Вот, пример накатал. Смысл в том, что грузится ХМЛ порциями. Этот класс так же умеет вещать загрузку следующей порции, ошибку и завершение загрузки. Так же можно узнать текщий номер загрузки, ну и вообще, переделывайте как вам надо =).
Сам класс:
import mx.utils.Delegate;
//
class CXMLLoader {
private var nextChapter:Number = 0;
private var __xml:XML;
private var xml2load:XML;
private var __url:String = "";
private var __type:String = "";
private var __totalNodes:Number = 0;
//
public var addListener:Function;
public var broadcastMessage:Function;
function CXMLLoader(){
_global.AsBroadcaster.initialize(this);
__xml = new XML('<rootNode />');
}
private function loadNext():Void {
xml2load = new XML();
xml2load.ignoreWhite = true;
xml2load.onLoad = Delegate.create(this,handleOnLoad);
switch(__type){
case "XML":
xml2load.load(__url+nextChapter+'.xml');
break;
case "PHP":
xml2load.load(__url+'.php?xml='+nextChapter);
break;
}
}
public function startLoading(url:String,type:String,totalNodes:Number):Void {
__url=url;
__type=type;
__totalNodes=totalNodes;
loadNext();
}
private function handleOnLoad(b:Boolean):Boolean {
if(b){
for(var i:Number=0; i<xml2load.childNodes.length; i++){
__xml.childNodes[0].appendChild(xml2load.childNodes[0]);
}
broadcastMessage('loadingNodeDone', xml2load);
if(__totalNodes>__xml.childNodes[0].childNodes.length){
nextChapter++;
loadNext();
} else {
broadcastMessage('loadingDone', __xml);
}
} else {
broadcastMessage('loadingError', __xml, nextChapter);
}
return b;
}
public function set cRequest(n:Number):Void {
return;
}
public function get cRequest():Number {
return nextChapter;
}
public function set nodesLoaded(n:Number):Void {
return;
}
public function get nodesLoaded():Number {
return __xml.childNodes[0].childNodes.length;
}
}
Пример использования:
var cxmll:CXMLLoader = new CXMLLoader();
var m_xml:XML;
cxmll.addListener(this);
function loadingNodeDone(_xml:XML){
trace('loadingNodeDone >> listener: '+_xml);
trace('=============== finished loading node # '+cxmll.cRequest+' ===============');
trace('=============== loaded so far '+cxmll.nodesLoaded+' nodes ===============');
};
function loadingDone(_xml:XML){
m_xml = _xml;
trace('loadingDone >> listener: '+_xml);
};
cxmll.addListener(this);
cxmll.startLoading('test','XML',23);
Примерный ХМЛ (в моем случае их было 7 штук):
<!-- test0.xml -->
<city id='28' longitude='-117.89' latitude='33.74' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-28.html'>Santa Ana, CA</city>
<city id='33' longitude='-122.85' latitude='39.12' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-33.html'>Nice, CA</city>
<city id='40' longitude='-121.33' latitude='36.42' photos='0' users='1' hostels='0' locationurl='hostels-a-city-n-40.html'>Soledad, CA</city>
<city id='46' longitude='-117.914' latitude='33.8353' photos='0' users='0' hostels='2' locationurl='hostels-a-city-n-46.html'>Anaheim, CA</city>
<city id='57' longitude='-109.03' latitude='48.58' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-57.html'>Zurich, MT</city>
Немного еще добавил информации.
Спасибо Вам огромное, что столько накатали:)!
Пойду разбираться
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.