Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.12.2010, 11:33
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 21  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: 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 только в случае крайней необходимости (экономия серверного трафика, большие нагрузки, большое кол-во посетителей, слабая серверная сторона) и при отсутствии русскоязычных текстов (передавать цифровые данные, координаты и т.п.).
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 08.12.2010, 12:10
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 22  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
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}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 08.12.2010, 12:28
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 23  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Короче провел эксперимент и заранее извиняюсь перед сторонниками 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

Старый 08.12.2010, 13:12
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 24  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Жестко. Хотя такое время для человека все равно не заметно будет

Старый 08.12.2010, 13:29
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 25  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
тот же код, что и выше.
в кач-ве 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


Последний раз редактировалось ps_spectre; 08.12.2010 в 13:34.
Старый 08.12.2010, 13:41
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 26  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Цитата:
Сообщение от ps_spectre Посмотреть сообщение
тот же код, что и выше.
в кач-ве JSON декодера/енкодера используется библиотека blooddy_crypto.swc товарища BlooDHounD
Спасибо, хотел тоже самое сегодня сделать )
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 08.12.2010, 13:52
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 27  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
blooddy_crypto.swc
есть какие нибудь ограничения на использование? (в коммерческих проектах)

Старый 08.12.2010, 13:58
ps_spectre вне форума Посмотреть профиль Отправить личное сообщение для ps_spectre Найти все сообщения от ps_spectre
  № 28  
Ответить с цитированием
ps_spectre
 
Аватар для ps_spectre

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
Genzo, если скачать, там будет файлик license.txt.
первая строка — The MIT License
что, собственно, эпик вин )

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

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

Старый 11.12.2010, 14:17
temofony вне форума Посмотреть профиль Отправить личное сообщение для temofony Найти все сообщения от temofony
  № 29  
Ответить с цитированием
temofony
[+5 27.02.11]
[+ 26.04.11]
 
Аватар для temofony

Регистрация: Feb 2010
Сообщений: 153
Отправить сообщение для temofony с помощью ICQ Отправить сообщение для temofony с помощью Skype™
не ребят,проковырявшись с полчаса в коде,приведенном на первой странице,я так и не смог его заставить ничего отпрвлять,т.к компилятор ругался:
1120: Access of undefined property completeHandler.
мда...на втором ас можно было отправить переменную тремя строками,тут двадцатью тремя без проблем не отправишь...вывод-остаюсь себе спокойненько на ас2,а не с этой какашкой,на которой чтобы трейсануть строку целый класс писать будут.....
__________________
Незнание правил освобождает от ответственности.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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