![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
to APM
Мне понравилось , пошел думать . А можно дать наводку ( ссылки, откуда начать искать.. и т.д.) на информацию о механизме включения и выполнения ActionScript во Флеше - то самое "hardcoded" i interpreteded ? - это очень интересно (со структурой свф-а чуть-чуть знаком.. ![]() to DMCom Тесты с XML чуть позже выложу, вроде я там в самом деле лажанулся , что правда , не отменяет замерзания с ним.. ![]() |
|
|||||
|
Привет, ну вы блин даёте, вот что я думаю:
Первое: Try - я тут подумал и понял, что мы с тобой говорим о разных вещах:: Вот как бы я сделал вместо той петрушки которую ты заварил У тебя есть массив MyArray[10000] ... структур { a : Int; b: Int; c: String; } На серваке делаешь <node><a>1</a><b>20</b><c>MyString</c></node> <node><a>2</a><b>20</b><c>MyString</c></node> ..............500000 раз.............. <node><a>500000</a><b>20</b><c>MyString</c></node> Грузишь в MyXMLObject = new XML(); делаешь MyXMLArray = MyXMLObject.childNodes; теперь MyXMLArray[1] = "<node><a>1</a><b>20</b><c></c>MyString</node>"; MyXMLArray[2] = "<node><a>2</a><b>20</b><c></c>MyString</node>"; и так далее.. Понимаешь о чем я? Затем тебе надо получить значение для "a" в 1000 позиции, A = GetAValue(1000); function GetAValue(Index) { return MyXMLArray[Index].firstChild.firstChild.nodeValue; } function getBValue (Index) { .................. } function GetStringValue(Index) { ................. } ни чего не тормозит не залипает и не глючит ................. Именно для таких целей и добавлен объект XML, а не просто для тупой пересылке данных и затем сливания их в какой нибуть простой массив........ ![]() |
|
|||||
|
Второе: А по поводу того если нужно всё-же зачитать в массив,
то нужно организовать трех кадровый цикл в каком нибуть муве, 1 Frame; Инитим каунтер . 2 Frame: Тело цикла; 3 Frame: Необходимые итерации, проверки .... и переход на Frame 1; Вот такая вот загогулина получается......... ) Если что не так, то вот моя аська 121790661.... |
|
|||||
|
Регистрация: Sep 2001
Адрес: Минск, РБ
Сообщений: 106
|
To DMCom
Спасибо DMCom – ты безусловно прав. XML object во Flash5 реализован просто замечательно, только сейчас у меня дошли руки с ним разобраться. (Первоначальное знакомство с его описанием в документации как-то не вдохновило). Зато какое удовольствие я получил сейчас после длительного общения со всякими SAX и DOM парсерами, как не хватает в Sunовских пакетах чего-то похожевого – простого, удобного и удивительно быстрого. Еще раз спасибо - теперь и я буду регулярно хоронить LoadVariables. А если Macromedia также реализует SVG object – наступит благодать неописуемая… To trY Предлагаю тебе попробовать вот этот фрагмент кода – надеюсь результат тебе понравиться. (Данные (xmldata.xxx) подготовь как советовал DMCom) Я во всяком случае для себя определенные выводы сделал. Можем переходить к следующим проблемам. on ( release ) { //mcSplit.loadVariables( "load1.txt", "POST" ); function getAValue(index) { //trace(_root.MyXMLArray[index].firstChild) //try it for better understanding XML object return _root.MyXMLArray[index].firstChild.firstChild.nodeValue } function getBValue(index) { //trace(_root.MyXMLArray[index].childNodes) //try it for better understanding XML object return _root.MyXMLArray[index].childNodes[1].firstChild.nodeValue } function getCValue(index) { //trace(_root.MyXMLArray[index].childNodes[2].firstChild) //try it for understanding XML object return _root.MyXMLArray[index].childNodes[2].firstChild.nodeValue } MyXMLObject = new XML() MyXMLObject.onLoad = function (success) { if (success) { var iTimer = getTimer() _root.MyXMLArray = this.childNodes var timeSplit = (getTimer() - iTimer) / 1000 var allTime = (getTimer() - startTime) / 1000 iTimer = getTimer() txResult = "last record:" + "\na = " + getAValue(_root.MyXMLArray.length - 1) + "\nb = " + getBValue(_root.MyXMLArray.length - 1) + "\nc = " + getCValue(_root.MyXMLArray.length - 1) var readTime = (getTimer() - iTimer) / 1000 _root.txSplit = "xml load " + _root.MyXMLArray.length + " xml records" + "\nsplit time: " + timeSplit + "\nall time: " + allTime + "\n" + txResult + "\nread time: " + readTime //trace(MyXMLArray) //try it for better understanding XML object } else { _root.txSplit = "ERROR!" } } startTime = getTimer() MyXMLObject.load("xmldata.xxx") } P.S. Выполнение задачи кусками все-таки советую взять на заметку - при серьезной обработке текста (и не только) очень часто приходится сталкиваться с "тормозами". А во Flash такое “выполнения по частям” очень удобно делать. P.P.S. Я бы не советовал искать "ключики" к hardcoded функциям (фактически ассемблерные вставки в плейер)– во первых это нарушает модель защиты Flash, а во вторых – ненадежно – может измениться в новой версии плейера. И вообще мне бы не хотелось услышать о флеш-вирусах и так заказчики пошли перепуганные. Так что "ключики" эти если и есть, то должны быть хорошо спрятаны, а если бы их прятал я - так еще бы и пару сюрпризов приготовил для "шаловливых ручек". |
|
|||||
|
Всем большое спасибо,
, пошел думатьВыкладываю тест с XML данными. Результат теста: происходит "замораживание" при создании Флешем XML-a - т.е. между командой Load и вызовом функции onLoad ( Правда, времена поменьше будут ![]() 1) 100 нодов, в ноде 4 атрибута - 0.450 секунды 2) 200 нодов, в ноде 4 атрибута - 0.80 секунды 3) 400 нодов, в ноде 4 атрибута - 1.60 секунды Тест прикладываю ![]() Думать пошел ![]() |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Можно ускорить парсинг ХМЛ во флэш если убить пробелы и переносы, так как флэш понимает их как текстовые ноды и создает элементы, на что естественно тратятся ресурсы.
Ниже сравнение между файлами с пробелами и после их удаления на моей машине. Тестирование без редактирования файлов. Start loading; 100 nodes ; Loaded by onLoad function; Delta Time = 445 Start loading; 200 nodes ; Loaded by onLoad function; Delta Time = 768 Start loading; 400 nodes ; Loaded by onLoad function; Delta Time = 1454 После удаления проблелов и переносов: Start loading; 100 nodes ; Loaded by onLoad function; Delta Time = 273 Start loading; 200 nodes ; Loaded by onLoad function; Delta Time = 451 Start loading; 400 nodes ; Loaded by onLoad function; Delta Time = 848 |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Еще есть предположение что можно переписать функцию парсинга в прототипе, по моему я видел подобный механизм на
http://www.layer51.com/proto утверждалось что работает раз в десять быстрее, или даже больше. И Дениска на форуме (нужно поискать) давал наводку переделываня парсинга чере ASNative (что не рекомендуется потому что наличие этой функции в шестерке под вопросом) Я не переделываю парсинг, потому что у меня соообщения не в основном одно-нодовые, ну иногда бывает до пяти. |
|
|||||
|
Регистрация: Sep 2001
Адрес: Минск, РБ
Сообщений: 106
|
|
![]() |
Часовой пояс GMT +4, время: 16:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|