Категория | Разработка Flex

Flex: Чтобы увеличить спектакли XML DataGrid +

27 июля 2007 года Жюльен Lestel

Задаваемые всех Flex кодеров: Какой самый быстрый способ чтения больших файлов XML данные и просматривать их в DataGrid? Четыре используемых методов и их выполнение на машине ... Источник: http://philflash.inway . COM / dgperf / index.html

Способ 1 (классическая) узлов, с XMLConnector диаграммы и Databinding Способ 2 Атрибуты, с XMLConnector Схематическое и DataBinding Способ 3 атрибутов разбора XML и Dataprovider Способ 4 Атрибуты разбора XML и предметов
Flash Player 7 12 388 мс 11 963 мс 2 930 мс 442 мс
Flash Player 8 9 365 мс 7 569 мс 1 858 мс 314 мс

Подробная информация о проблеме

Во многих пользователей жалуются исполнении Flex читать файлы XML.Voici классификации 4 методами:

Способ 1

Представлять данные, мы используем узлов. Клиент представлена следующим образом: <client><nom>Deschamps</nom><prenom>Amandine</prenom><ville>Caluire-Et-Cuire</ville><age>43</age><ca>2173.7</ca></client> Для Flash, мы используем XMLConnector прочесть файл (с помощью диаграмм), модель для DataSet и DataGrid для отображения данных. Она использует данные, связь (DataBinding) для связывания 3 éléments.C 'метод является "классическим" вы найдете во многих учебников.

Почему этот метод медленно?

XML-файла размером 315 кб. При использовании схемы XMLConnector, Flash использует XPath для доступа données.Le файла большой, XPath медленно: Это самая длинная. Она доходит до 12.5 секунд.

Способ 2

Идея этого метода состоит в том, чтобы использовать атрибуты (вместо узлов) и посмотрите, воздействие на клиента performances.Un представлена следующим образом: <client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/> Для Flash, мы используем тот же метод, что и в методе 1: XMLConnector следующий файл (с помощью импорта схемы), а DataSet модель и DataGrid для отображения данных. Она использует данные, связь (DataBinding) для связывания 3 элементов.

Почему этот метод работает быстрее, чем метод 1?

XPath является "быстрых" для доступа к атрибутам (на узле). Заметим также, что XML является более "мелкие" (164 кб вместо 315 кб). Длится около 12 секунд ...

Способ 3

Представлять данные, мы используем attributs.L идея этого метода состоит не использовать формат XMLConnector (который использует XPath), но парсер вручную XML.Pour этого, мы читаем "быстрый" XML : она используется при цикле с nextSibling. Для кодирования чисел, мы используем номер (не parseInt и parseFloat которые медленнее). Есть не более databinding между XMLConnector и Dataset. Он использует Dataprovider из DataSet связать результате разбора XML.

Почему этот метод работает быстрее, чем метод 2?

Она выполняет вручную разбора XML. Он больше не использует XPath (а не с помощью схемы XMLConnector). Как и в отношении, она должна кодировщик атрибутов. В большинстве данных XML, Есть строк и чисел. Кодирование очень быстро. Испытание длится 3 секунды.

Метод 4

Что метод 3, мы знаем, очень быстро читать XML. Идея этого метода, могут ли они улучшить данных (с использованием метода Dataprovider 3). Если вы посмотрите на документацию DataSet, Есть два способа связать данные DataSet: метод Dataprovider и метод пунктов. Какая разница между пунктами и Dataprovider? документации Flash MX 2004, Flash 8 LiveDocs или не давать слишком много деталей. Поэтому мы должны смотреть на источниках данных: в Flash 8: Macromedia \ Flash 8 \ EN \ Первый Run \ Classes \ MX \ Data \ компоненты \ DataSet. Асен сути, метод Dataprovider выполняет преобразование типа при наличии схемы ( в методе internalAddItem). Элементы метода делает прямую ссылку (без конверсии / проверка типа). Как мы уже добились преобразования, он использует метод пунктов. (В Способ 3, тип конверсии не было необходимости). Код выглядит следующим образом:

client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}

Вот способ перехода с 12,5 секунды до менее чем на 0,5 секунд, чтобы прочитать файл 2 000 записей!

Если вы впервые на Flex-info.fr, Вы можете подписаться на RSS канал. Благодарим Вас за Ваш визит!

1 étoile2 étoiles3 étoiles4 étoiles5 étoiles (Нет Рейтинги Еще)
Loading ... Загрузка ...

1 комментариев на этот пост

  1. momowell Говорит:

    Привет
    Я вижу, что это хороший способ, но вы бы поставить во Flex проекта. Мои JE n'y прибыли па!

Напишите комментарий