|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2008
Сообщений: 14
|
Если не говорить об абстрактных классах и прочих ковыряниях в памяти, то все, что мы делаем - это именно объекты Flash-плеера, всякие мувиклипы и текстовые поля.
Просто когда был as2 было очевидно, что все это - косметические изменения с целью избежать диких конструкций вроде registerClass. Выход as3 и комментарии пользователей дали мне повод радоваться, что все действительно переписано по-новой и по-правильному. Чем дальше я лезу, тем больше вижу, что дело ограничилось опять косметикой. Например, в доке, в факах и вообще повсюду говорят, что надо выбирать Sprite вместо MovieClip, если таймлайн не нужен, дескать меньше памяти и меньше нагрузка. Тесты показывают, что разница между клипом и спрайтом - около 16 байтов (причем как в ram, так и на диске). Так в чем суть, действительно что-то не импортится и не занимает память, или просто другой набор признаков, определяющих для плеера правила игры? После asSetPropFlags я уже ничему не удивлюсь. |
|
|||||
Регистрация: Aug 2008
Сообщений: 34
|
2s8000_1 вот держи в помощь
"Advanced ActionScript 3 with Design Patterns " дальше сам, |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
AS3noob, интересно, как было подсчитана используемая оперативка. 16 байт — это очень много, действительно много.
|
|
|||||
Регистрация: Jan 2008
Сообщений: 28
|
AS3noob, не в памяти разница, а в скорости работы
|
|
|||||
Регистрация: Nov 2008
Сообщений: 14
|
Firexel
Откуда взяться изменению скорости работы, если обе сущности - одно и то же?.. В конце концов, лично я пока не попробую, не поверю. Адобы еще в as2 писали о защите данных private, и что? __etc Да тест-то простецкий. Делаем в библиотеке клип, в нем - прямоугольник, linkage class=test2, base class=flash.display.Sprite Класс основного документа mainDoc 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"); } } } У меня результаты такие: 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 на объект 15 байт - это вовсе не "много". Я сейчас проверяю предположение, что класс movieClip не "распался" на дерево классов, а остался целостным контейнером, в котором просто блокируются некие свойства, в стиле asSetPropFlags. Исходя из этой идеи, память на спрайты и память на мувики должна быть одинаковой. Полученная картина похожа на настоящую, 15 байт - заполненные свойства, которых "нет" у Sprite и которые поэтому пусты. Например, свойство name для объекта instance999 займет минимум 12 байтов, ну и так далее. Впрочем, возможно подстава не "всеобщая", а только в том случае, когда объект делают по библиотечному, а не from scratch, например программа 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"); } } } Sprite memory: 6385664 memory: 35979264 delta=29593600 time: 2924 ms MovieClip memory: 6385664 memory: 37036032 delta=30650368 time: 3047 ms Разница: 1056768 b, на объект: 105.6768 Разница по времени незаметна и может определяться иными тормозами компа. 100 байт - это уже существенней, хотя все равно маловато. Очень маловато. Последний раз редактировалось AS3noob; 11.11.2008 в 20:54. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
AS3noob, тест простецкий, да ничего не показывающий. Скорость добавления в display list может и одинаковая, но вы не учли то, что эти клипы ещё и на экране крутятся впоследствии и тестировать одиночную операцию по добавлению всей этой толпы спрайтов с клипами на экран бессмысленно, потому как на стадии добавления даже рендер не происходит.
А private работает, можете не сомневаться. |
|
|||||
Регистрация: Nov 2008
Сообщений: 14
|
Сейчас пытаюсь придумать адекватный тест на проверку разницы в скоростях работы. Какие есть идеи?
__etc private и в as2 кое-как работал, может, просто получше подкрутили? Что касается скорости добавления в disp list - это не то все. СОЗДАЮТСЯ ОБЪЕКТЫ, вот что ключ, а не дисплей лист. Здесь речь идет о том, что sprite и mc занимают в памяти очень похожее место, при том, что mc есть чистый спрайт + еще кой чего, и этого "еще" оказалось на 16 смешных байт (или 100 в других условиях), что не соответствует заявлениям, что sprite значительно экономичней чем mc - по памяти и по скорости. Если есть прокол в одном утверждении (хотя я и не решуть тыкнуть пальцем в цитату, но таково "общее мнение"), то почему не заподозрить дыры в других?. Последний раз редактировалось AS3noob; 11.11.2008 в 21:00. |
|
|||||
не пойму причин такой озабоченности, весь функционал Sprite и MovieClip реализован в плеере, откуда бы взяться разнице в отъедаемой памяти..
желание пользовать динамического наследника спрайта, там где его функционал не востребован тоже, мягко говоря, странное чего доказываем-то, собственно? |
|
|||||
Регистрация: Nov 2008
Сообщений: 14
|
Хороший вопрос.
Просто люблю ковыряться отверткой в ухе. Это сложно сказать заранее. Велика ли практическая польза от обнаруженного когда-то asSetPropFlags? Ну увидели в глобале класс cookie, и что с него? Тем не менее, эта команда объяснила множество особенностей работы плеера и as2. Понимание прототипной модели as1/as2, надеюсь, вы не считаете бестолковым? Кстати, то что наблюдается, очень похоже на прототипы. На самом деле, просто хочу лучше понимать, что происходит внутри. Добавлено через 4 минуты Flash - с рождения набор практических правил, не всегда очевидных. Ставь растр в точные координаты. Под маской включай шрифт. _global для разных версий swf - разный. При написании классов (as1) используй анонимные функции. Переменная, объявленная var есть временная, примечание: в кадрах и статичных кодах это не работает. Ну и так далее. Просто изучаю правила дальше. Кстати, есть правило onClipEvent (enterFrame) - плохо, mc.onEnterFrame - хорошо. Почему??? |
Часовой пояс GMT +4, время: 05:29. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|