![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2009
Сообщений: 428
|
Все таки хорошо что есть такие вещи как форумы )
Провел полевые испытания компактности 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 только в случае крайней необходимости (экономия серверного трафика, большие нагрузки, большое кол-во посетителей, слабая серверная сторона) и при отсутствии русскоязычных текстов (передавать цифровые данные, координаты и т.п.).
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
12-20 против 30-40? это говорит о том, что при создании авторы не думали и в результате, структура была больше данных и съедала больше половины общего объема. У xml излишество только из-за наличиая названия нода в закрывающем теге. Типа personAddressStreet или personPhoneNumber, или избыточное число нодов, вместо атрибутов. Во многих случаях закрывающий нод компактен.
Сравните (63 байта в этом виде, 49 байтов без переносов и табуляций) с (34 байта) Причем это пример одинаков по размеру с json |
|
|||||
|
Короче провел эксперимент и заранее извиняюсь перед сторонниками JSON ( к которым отношу и себя ) :
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())); |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Жестко. Хотя такое время для человека все равно не заметно будет
|
|
|||||
|
тот же код, что и выше.
в кач-ве JSON декодера/енкодера используется библиотека blooddy_crypto.swc товарища BlooDHounD 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); } } json: 288ms xml: 142ms в debug: json: 326ms xml: 137ms Последний раз редактировалось ps_spectre; 08.12.2010 в 13:34. |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 428
|
Цитата:
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
|
blooddy_crypto.swc
есть какие нибудь ограничения на использование? (в коммерческих проектах) |
|
|||||
|
[+5 27.02.11]
[+ 26.04.11] |
не ребят,проковырявшись с полчаса в коде,приведенном на первой странице,я так и не смог его заставить ничего отпрвлять,т.к компилятор ругался:
1120: Access of undefined property completeHandler. мда...на втором ас можно было отправить переменную тремя строками,тут двадцатью тремя без проблем не отправишь...вывод-остаюсь себе спокойненько на ас2,а не с этой какашкой,на которой чтобы трейсануть строку целый класс писать будут.....
__________________
Незнание правил освобождает от ответственности. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|