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

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

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

Регистрация: Nov 2008
Сообщений: 14
Если не говорить об абстрактных классах и прочих ковыряниях в памяти, то все, что мы делаем - это именно объекты Flash-плеера, всякие мувиклипы и текстовые поля.
Просто когда был as2 было очевидно, что все это - косметические изменения с целью избежать диких конструкций вроде registerClass. Выход as3 и комментарии пользователей дали мне повод радоваться, что все действительно переписано по-новой и по-правильному. Чем дальше я лезу, тем больше вижу, что дело ограничилось опять косметикой.
Например, в доке, в факах и вообще повсюду говорят, что надо выбирать Sprite вместо MovieClip, если таймлайн не нужен, дескать меньше памяти и меньше нагрузка. Тесты показывают, что разница между клипом и спрайтом - около 16 байтов (причем как в ram, так и на диске). Так в чем суть, действительно что-то не импортится и не занимает память, или просто другой набор признаков, определяющих для плеера правила игры? После asSetPropFlags я уже ничему не удивлюсь.

Старый 07.11.2008, 22:33
flashscout вне форума Посмотреть профиль Отправить личное сообщение для flashscout Найти все сообщения от flashscout
  № 22  
Ответить с цитированием
flashscout
 
Аватар для flashscout

Регистрация: Aug 2008
Сообщений: 34
2s8000_1 вот держи в помощь
"Advanced ActionScript 3 with Design Patterns "
дальше сам,

Старый 07.11.2008, 22:39
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 23  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Смольный, спасибо, давно искал подобную статью!
__________________
тонкий тролль, осеянный благодатью

Старый 07.11.2008, 23:18
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 24  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
AS3noob, интересно, как было подсчитана используемая оперативка. 16 байт — это очень много, действительно много.

Старый 09.11.2008, 17:54
Firexel вне форума Посмотреть профиль Отправить личное сообщение для Firexel Найти все сообщения от Firexel
  № 25  
Ответить с цитированием
Firexel

Регистрация: Jan 2008
Сообщений: 28
AS3noob, не в памяти разница, а в скорости работы

Старый 11.11.2008, 20:35
AS3noob вне форума Посмотреть профиль Отправить личное сообщение для AS3noob Найти все сообщения от AS3noob
  № 26  
Ответить с цитированием
AS3noob

Регистрация: Nov 2008
Сообщений: 14
Firexel
Откуда взяться изменению скорости работы, если обе сущности - одно и то же?.. В конце концов, лично я пока не попробую, не поверю. Адобы еще в as2 писали о защите данных private, и что?

__etc
Да тест-то простецкий.
Делаем в библиотеке клип, в нем - прямоугольник, linkage class=test2, base class=flash.display.Sprite
Класс основного документа mainDoc

Код AS3:
package {
		import flash.display.Sprite; 
		import flash.system.System;
		import flash.display.Shape;
		import flash.utils.*;
 
		public class mainDoc extends Sprite { 
			public function mainDoc() {
				var bar:int = System.totalMemory;
				var baz:int = getTimer();
				trace ("memory: " + bar);
				for (var i=0; i<10000; i++) {
					var foo:test2 = new test2();
					this.addChild(foo);
					foo.x = foo.y = i;
				}
				trace ("memory: " + System.totalMemory + "\t\tdelta=" + (System.totalMemory-bar));
				trace ("time: " + (getTimer() - baz) + " ms");
			}
 
		}
}
Исполняем, замеряем. Потом то же самое, но у класса test2 (наш клип) base class = flash.display.MovieClip

У меня результаты такие:
Код:
flash.display.Sprite
memory: 6361088
memory: 17371136		delta=11010048
time: 5370 ms

flash.display.MovieClip
memory: 6369280
memory: 17534976		delta=11165696
time: 5325 ms

Разница: 155648b		15.5648 на объект
Ясное дело, что могут быть погрешности, связанные с выделением памяти страницами (мои опыты дают число 4 кб), но это несущественно.
15 байт - это вовсе не "много". Я сейчас проверяю предположение, что класс movieClip не "распался" на дерево классов, а остался целостным контейнером, в котором просто блокируются некие свойства, в стиле asSetPropFlags. Исходя из этой идеи, память на спрайты и память на мувики должна быть одинаковой. Полученная картина похожа на настоящую, 15 байт - заполненные свойства, которых "нет" у Sprite и которые поэтому пусты. Например, свойство name для объекта instance999 займет минимум 12 байтов, ну и так далее.

Впрочем, возможно подстава не "всеобщая", а только в том случае, когда объект делают по библиотечному, а не from scratch, например программа

Код AS3:
package {
		import flash.display.Sprite; 
		import flash.display.MovieClip;
		import flash.system.System;
		import flash.display.Shape;
		import flash.utils.*;
 
		public class mainDoc extends Sprite { 
			public function mainDoc() {
				var bar:int = System.totalMemory;
				var baz:int = getTimer();
				trace ("memory: " + bar);
				for (var i=0; i<10000; i++) {
					var foo:MovieClip = new MovieClip();
					foo.graphics.beginFill(0x00FFFF, 1);
					foo.graphics.drawRect(-50, -30, 100, 60);
					this.addChild(foo);
					foo.x = foo.y = i;
				}
				trace ("memory: " + System.totalMemory + "\t\tdelta=" + (System.totalMemory-bar));
				trace ("time: " + (getTimer() - baz) + " ms");
			}
 
		}
}
с тем же изменением (в строке var foo:MovieClip = new MovieClip(); меняем на Sprite) дает совсем другую картину:

Код:
Sprite
memory: 6385664
memory: 35979264		delta=29593600
time: 2924 ms

MovieClip
memory: 6385664
memory: 37036032		delta=30650368
time: 3047 ms


Разница: 1056768 b, на объект: 105.6768
Впрочем, у меня порой получалась и разница поменьше, 97-98 байтов.
Разница по времени незаметна и может определяться иными тормозами компа.
100 байт - это уже существенней, хотя все равно маловато. Очень маловато.


Последний раз редактировалось AS3noob; 11.11.2008 в 20:54.
Старый 11.11.2008, 20:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 27  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
AS3noob, тест простецкий, да ничего не показывающий. Скорость добавления в display list может и одинаковая, но вы не учли то, что эти клипы ещё и на экране крутятся впоследствии и тестировать одиночную операцию по добавлению всей этой толпы спрайтов с клипами на экран бессмысленно, потому как на стадии добавления даже рендер не происходит.

А private работает, можете не сомневаться.

Старый 11.11.2008, 20:56
AS3noob вне форума Посмотреть профиль Отправить личное сообщение для AS3noob Найти все сообщения от AS3noob
  № 28  
Ответить с цитированием
AS3noob

Регистрация: Nov 2008
Сообщений: 14
Сейчас пытаюсь придумать адекватный тест на проверку разницы в скоростях работы. Какие есть идеи?

__etc
private и в as2 кое-как работал, может, просто получше подкрутили?
Что касается скорости добавления в disp list - это не то все. СОЗДАЮТСЯ ОБЪЕКТЫ, вот что ключ, а не дисплей лист. Здесь речь идет о том, что sprite и mc занимают в памяти очень похожее место, при том, что mc есть чистый спрайт + еще кой чего, и этого "еще" оказалось на 16 смешных байт (или 100 в других условиях), что не соответствует заявлениям, что sprite значительно экономичней чем mc - по памяти и по скорости. Если есть прокол в одном утверждении (хотя я и не решуть тыкнуть пальцем в цитату, но таково "общее мнение"), то почему не заподозрить дыры в других?.


Последний раз редактировалось AS3noob; 11.11.2008 в 21:00.
Старый 11.11.2008, 21:29
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 29  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не пойму причин такой озабоченности, весь функционал Sprite и MovieClip реализован в плеере, откуда бы взяться разнице в отъедаемой памяти..

желание пользовать динамического наследника спрайта, там где его функционал не востребован тоже, мягко говоря, странное

чего доказываем-то, собственно?

Старый 11.11.2008, 21:53
AS3noob вне форума Посмотреть профиль Отправить личное сообщение для AS3noob Найти все сообщения от AS3noob
  № 30  
Ответить с цитированием
AS3noob

Регистрация: Nov 2008
Сообщений: 14
Хороший вопрос.
Просто люблю ковыряться отверткой в ухе.
Это сложно сказать заранее. Велика ли практическая польза от обнаруженного когда-то asSetPropFlags? Ну увидели в глобале класс cookie, и что с него?
Тем не менее, эта команда объяснила множество особенностей работы плеера и as2.
Понимание прототипной модели as1/as2, надеюсь, вы не считаете бестолковым?
Кстати, то что наблюдается, очень похоже на прототипы.

На самом деле, просто хочу лучше понимать, что происходит внутри.

Добавлено через 4 минуты
Flash - с рождения набор практических правил, не всегда очевидных. Ставь растр в точные координаты. Под маской включай шрифт. _global для разных версий swf - разный. При написании классов (as1) используй анонимные функции. Переменная, объявленная var есть временная, примечание: в кадрах и статичных кодах это не работает. Ну и так далее. Просто изучаю правила дальше.

Кстати, есть правило onClipEvent (enterFrame) - плохо, mc.onEnterFrame - хорошо. Почему???

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

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

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


 


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


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