Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подвисает FP при обходе XML по e4x (http://www.flasher.ru/forum/showthread.php?t=169269)

XoJlToH 01.10.2011 18:59

Подвисает FP при обходе XML по e4x
 
Дано xml документ в 12000 строк и более
Есть флэшка одной из задач которой является обход этого документа.
Обход выполняется несколькими циклами

Код AS3:

var tf:TextField = new TextField();
var idis:Object = new Object(); //имеется некий объект со своими полями. По длине объекта запускаем цикл
for (var i:Number = 0; i < idis.length; i++)
{
        tf.text = "Step " + i + " of " + idis.length; //хотелось бы на этом этапе в текстовом поле увидеть текст
        resumeData(idis[i]);
}
 
function resumeData(idi:Object)
{
        var years:Array = [2009, 2010]
        var indexes:Array = idi.indexes;
        for (var i:Number = 0; i < years.length; i++)
        {
                for (var j:Number = 0; j < indexes.length; j++)
                {
                        tf.text = "Обработка данных за " + (years[i]) + "год. Индекс " + indexes[j]; //хотелось бы на этом этапе в текстовом поле увидеть текст
                        var riList = _values.xml.*.(@idi == Number(indexes[j]) && @idy == Number(years[i]));
                        var r = riList.(@idr == idi.region)[0];
                                if (r != undefined)
                                        {
                                                //код
                                        }
                }
        }
}

Комментариями отмечены места где ожидается вывод текста. Вместо этого текст выводится только при завершении всех циклов, если конечно не превышено время ожидания для скрипта. Почему так? И каким образом можно все таки вывести текст? Ставить небольшой дилэй после каждого большого шага?

-De- 01.10.2011 20:42

http://help.adobe.com/en_US/as3/mobi...ng_content.pdf
Надо знать то, что в главе "Runtime code execution fundamentals" (она считай первая).

GBee 01.10.2011 20:43

вы хотите увидеть нечто вроде прогресса?
Замените цикл на enterframe, каждый кадр обрабатывайте пачку данных.
Код AS3:

tf.text +=

Года по другому можно реализовать скорее всего. Простейшая оптимизация для выигрыша в скорости тоже помогут, например запоминать длины массивов в переменных и трогать их.

XoJlToH 01.10.2011 21:17

Добился нужного эффекта заменой вызывающего цикла на таймер. Про эластик фрейм в курсе


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

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