Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   переменные в php (http://www.flasher.ru/forum/showthread.php?t=147543)

leofit 08.12.2010 11:33

Все таки хорошо что есть такие вещи как форумы )

Провел полевые испытания компактности JSON vs XML.

В качестве образца взял данные, приведенные выше - про Ивана Иванова. JSON взял со своего приведенного примера, XML с примера, приведенного iNils. Убрал все пробелы и переводы строк.

Делал в двух вариантах - с русским текстом "Иван" и на латиннице "Ivan", соответственно менял текст и в JSON и в XML. В русскоязычном варианте JSON генерился по типу \u0418\u0432\u0430\u043d

Создал файлы, в каждом из которых содержалось 1000 записей про Ивана Иванова. Результаты:

json_ru - 340 кб
xml_ru.xml - 242 кб

json_eng - 179 кб
xml_eng.xml - 205 кб

В англоязычном варианте JSON сэкономил 26 кб, что, учитывая все его минусы при работе во flash, нифига не радует.

Итог: Использовать JSON только в случае крайней необходимости (экономия серверного трафика, большие нагрузки, большое кол-во посетителей, слабая серверная сторона) и при отсутствии русскоязычных текстов (передавать цифровые данные, координаты и т.п.).

iNils 08.12.2010 12:10

12-20 против 30-40? это говорит о том, что при создании авторы не думали и в результате, структура была больше данных и съедала больше половины общего объема. У xml излишество только из-за наличиая названия нода в закрывающем теге. Типа personAddressStreet или personPhoneNumber, или избыточное число нодов, вместо атрибутов. Во многих случаях закрывающий нод компактен.
Сравните
Код:

<canvas>
        <x>0</x>
        <y>0</y>
        <w>1</w>
        <h>1</h>
</canvas>

(63 байта в этом виде, 49 байтов без переносов и табуляций)
с
Код:

<canvas x="0" y="0" w="1" h="1" />
(34 байта)

Причем это пример одинаков по размеру с json
Код:

"canvas":{"x":0,"y":0,"w":1,"h":1}

Genzo 08.12.2010 12:28

Короче провел эксперимент и заранее извиняюсь перед сторонниками JSON ( к которым отношу и себя ) :
Код AS3:

var json_string:String = '{  "firstName": "Иан",   "lastName": "Иванов",   "address": {       "streetAddress": "Московское ш., 101, кв.101",       "city": "Ленинград",       "postalCode": 101101   },   "phoneNumbers": [       "812 123-1234",       "916 123-4567"   ]                        }';
 
var xml_string: String= '<person> <firstName>Иван</firstName>  <lastName>Иванов</lastName>  <address>    <streetAddress>Московское ш., 101, кв.101</streetAddress>    <city>Ленинград</city>    <postalCode>101101</postalCode>  </address>  <phoneNumbers>    <phoneNumber>812 123-1234</phoneNumber>    <phoneNumber>916 123-4567</phoneNumber>  </phoneNumbers> </person>';
 
private function calcJSON(s:String)
{
        return JSON.decode(s);
}
 
private function calcXML(s:String)
{
        return new XML(s);
}
 
var oldTime:Date = new Date();
for(var i:uint = 0 ; i < 10000 ; i++)
{
        calcJSON(json_string);
}
var newTime:Date = new Date();
trace("JSON = ",Math.abs(oldTime.getTime() - newTime.getTime()));
 
var oldTime:Date = new Date();
for(var i:uint = 0 ; i < 10000 ; i++)
{
        calcXML(xml_string);
}
var newTime:Date = new Date();
trace("XML = ",Math.abs(oldTime.getTime() - newTime.getTime()));

И результат неутешительный :
Код AS3:

//JSON =  1325
//XML =  172


goodguy 08.12.2010 13:12

Жестко. Хотя такое время для человека все равно не заметно будет

ps_spectre 08.12.2010 13:29

тот же код, что и выше.
в кач-ве JSON декодера/енкодера используется библиотека blooddy_crypto.swc товарища BlooDHounD

Код AS3:

        import by.blooddy.crypto.serialization.JSON;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
        import flash.utils.getTimer;
 
        public class JsonVSXml extends Sprite
        {
                private var json_string:String = '{"firstName": "Иан", "lastName": "Иванов","address": {      "streetAddress": "Московское ш., 101, кв.101",      "city": "Ленинград",      "postalCode": 101101  },  "phoneNumbers": [ "812 123-1234", "916 123-4567" ]}';
                private var xml_string: String = '<person><firstName>Иван</firstName><lastName>Иванов</lastName>  <address>    <streetAddress>Московское ш., 101, кв.101</streetAddress>    <city>Ленинград</city>    <postalCode>101101</postalCode>  </address><phoneNumbers><phoneNumber>812 123-1234</phoneNumber><phoneNumber>916 123-4567</phoneNumber></phoneNumbers></person>';
                private var txt:TextField = new TextField();
 
                public function JsonVSXml()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);                       
                }
 
                private function init(e:Event = null):void
                {
                        if (hasEventListener(Event.ADDED_TO_STAGE))
                                removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        addChild(txt);                                               
                        var i:int = 0;
                        var iter:int = 10000;
 
                        var time:int = getTimer();
                        for(i = 0 ; i < iter ; i++) calcJSON(json_string);
                        txt.appendText("json: " + (getTimer() - time) + "ms\n");                       
                        time = getTimer();
                        for(i = 0; i < iter; i++) calcXML(xml_string);                                       
                        txt.appendText("xml: " + (getTimer() - time) + "ms\n");                       
                }
 
                private function calcJSON(s:String):*
                {
                        return JSON.decode(s);
                }
 
                private function calcXML(s:String):XML
                {
                        return new XML(s);
                }
        }

в release:
json: 288ms
xml: 142ms
в debug:
json: 326ms
xml: 137ms

leofit 08.12.2010 13:41

Цитата:

Сообщение от ps_spectre (Сообщение 955752)
тот же код, что и выше.
в кач-ве JSON декодера/енкодера используется библиотека blooddy_crypto.swc товарища BlooDHounD

Спасибо, хотел тоже самое сегодня сделать )

Genzo 08.12.2010 13:52

blooddy_crypto.swc
есть какие нибудь ограничения на использование? (в коммерческих проектах)

ps_spectre 08.12.2010 13:58

Genzo, если скачать, там будет файлик license.txt.
первая строка — The MIT License
что, собственно, эпик вин )

з.ы. товарищу BlooDHounD мега респект. )

з.з.ы. незабываем что на сайте flasher.ru есть активные и интересные блоги

temofony 11.12.2010 14:17

не ребят,проковырявшись с полчаса в коде,приведенном на первой странице,я так и не смог его заставить ничего отпрвлять,т.к компилятор ругался:
1120: Access of undefined property completeHandler.
мда...на втором ас можно было отправить переменную тремя строками,тут двадцатью тремя без проблем не отправишь...вывод-остаюсь себе спокойненько на ас2,а не с этой какашкой,на которой чтобы трейсануть строку целый класс писать будут.....


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

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