Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Внутренняя задержка генерации объектов: P166=P2400 xi.net.ru/drawboard.php?npage=1 (http://www.flasher.ru/forum/showthread.php?t=58446)

Dindin 23.05.2004 20:49

Ой, задел ты меня, дорогой товарищ xintrea, за живое своим скипом. Этот твой скип - он теперь мне вроде шила в одном месте - сидеть спокойно не дает...

Итак. Ни для кого, надеюсь не секрет, что флэш построен на принципе виртуальной машины. Самый близкий аналог, пожалуй Java. И флэш-плеер является для него ни чем иным, как интерпретатором. То есть той самой VM.
Аналогии с Явой очень близкие. Вплоть до того, что в AS2.0 принцип обработки исключений почти полностью позаимствован из JVM. Поэтому в дальнейшем я буду ссылаться на Java Virtual Mashine в целом (хотя это несколько различных машин), так как материала по Java гораздо более подробные. Итак. Как нам известно виртуальная машина всегда является процессом, а потоки, выполняемые программой - наследованными процессами. Поэтому скорость выполнения того или иного потока никак не может быть величиной постоянной - в первую очередь она зависит от приоритета родительского процесса, так как приоритет порожденного процесса не может быть выше приоритета родительского. Другой фактор, от которого зависит эффективность работы JVM - количество выделенных ей ресурсов, ибо зачастую исполняемому коду отводится небольшая "песочница" где-то в памяти, из которой он выйти не в состоянии. И изминить размеры этой песочницы может только "доверенный" код. То есть только тот код, которому пользователь собственноручно разрешил изменить "песочницу". Но вылезти в основную область памяти у приложения всё-равно не получится. И третий - самый, пожалуй, неприятный, но вместе с тем, неизбежный фактор - сборщик мусора. За то, что нам не приходится каждый раз инициализировать и завершать, а потом уничтожать объекты вручную мы платим тем, чтоэтот самый сборщик мусора - есть. Именно он очищает память. Пример:
Код:

code:obj = new Object();
delete obj;

Объект считается уничтоженным, но при этом продолжает занимать память. И будет занимать память до тех пор, пока количество свободных системных ресурсов не приблизится к критической точке. И вот только тогда появляется сборщик мусора и собирает все объекты, на которые нет ни одной активной ссылки.
Вот работа сборщика мусора, в 80 процентов случаев и приводит к жутким тормозам. К сожалению, в AS возможность явного вызова сборщика мусора недокументирована, поэтому приходится обходится подручными средствами. - пересозданием объектов. Дело в том, что синтаксическая запись a=new Object (); означает, что создается новый объект Object, и переменной a присваиватся ссылка на этот объект. Пример :
Код:

code:obj1 = {param:10};
obj2=obj1;
obbj2.param = 12;
trace (obj1.param);

Выводит 12, а не 10, как можно было бы ожидать.
Но. В AS есть обходной путь. Иработает он только для объектов типа MovieClip. Дело в том, что на одном уровне глубины (depth) одновременно может существовать только один объект с уникальным именем. Но (!) при создании второго такого объекта первый - не уничтожается, а перезаписывается с новыми параметрами. То есть не происходит выделение новой области памяти. а перераспределяется старая.
Поскольку функция в AS так же считается объектом-ссылкой на область памяти - подобное прокатывает и с функциями. Другой вопрос, если мы переменной присвоим ссылку на другой объект. Тогда перезаписи не происходит и ячейка памяти остается занятой.
В таких условиях даже на одной машине в зависимости от окружения код будет выполняться разное время, а ты говоришь P166=P2400.
И еще. Я замерил присланный код на двух машинах с близкими характеристиками. Windows и FreeBSD. 11 мс и 13 мс соответственно.

Итак, к чему же всё это было сказано? А к тому, что если ты, уважаемый
xintrea, хочешь что бы тебя воспринимали всерьез, разберись, для начала с темой. А уже потом пытайся перевернуть мир. И уверяю тебя, что когды ты копнешь поглубже, переворачивать его тебе совсем не захочется

sincerely yours, Dindin

xintrea 24.05.2004 02:24

Да уж... Всего три слова - горе от ума. Не обижайтесь.

Вопрос был предельно простым и понятным. Почему ролик по ентой пресловутой ссылке крутится почти с одинаковой скоростью что на P166, что на P2400?

Дополнительная информация: P166 с 32Mb мозгов и видюхой S3TrioV64+ мягко говоря довольно сильно отличается от P2400 с 512Mb и Radeon7500. Несмотря на такие весьма большого порядка различия, ролик крутится примерно с одинаковой скоростью (различие - секунды). Винда свежезагруженная, первая запущенная пользователем программа - Flashlayer6 с этим клипом. По логике вещей скорость должна отличаться в разы, на деле - несколько процентов.

> В таких условиях даже на одной
> машине в зависимости от
> окружения код будет
> выполняться разное время,
> а ты говоришь P166=P2400.
Дорогой Dindin, в своих рамышениях вы потеряли нить разговора.

Ответа на вопрос как соптимизировать/ускорить код или переделать структуру скрипта я тоже не услышал. Между тем, на других информационных ресурсах эту тему воспринимают вполне адекватно, тем более что у людей есть схожие проблеммы и пути их преодоления.

Досвидания, дорогой Dindin.

nuran 24.05.2004 09:02

Цитата:

Оригинал написал(а) Dindin
/// у буржуев чайников не меньше чем у нас, и имя "Питер Холл" без ссылки на первоисточник мне лично ни о чем не говорит. (старая сказка "а вот в развитых странах...")
http://www.peterjoel.com

Nox Noctis 24.05.2004 11:02

Цитата:

Ответа на вопрос как соптимизировать/ускорить код или переделать структуру скрипта я тоже не услышал.
не надо подменять контекст :) ты спросил почему так происходит на уровне плеера, а не на уровне того что под этот плеер написано.

Диньдинь очень в тему упомянул про виртуальную машину - ведь она является посредником между твоим скриптом и операционной системой. и скорость исполнения скрипта зависит от этой машины.

— если ты спросишь как ускорить виртуальную машину - ответ: не знаю. руки не доходят покопаться в СДК, может там что-то прояснится...

— если ты спросишь как ускорить код (о чем ты вообще-то не спрашивал изначально) - я скажу что нужно почитать документацию по http://flasm.sourceforge.net/ и поэкспериментировать с разными типами синтаксиса, какие коды ассемблера ВМ они генерят, какие быстрее выполняются и как их оптимизировать.
Цитата:

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

и вот это меня вообще поражает:
Цитата:

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

Цитата:

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

Dindin 24.05.2004 14:09

http://www.peterjoel.com/blog/?archi...01_archive.xml - собственно говоря первоисточник, те самые буржуйские источники, на которые ссылается глубокоуважаемый xintrea.
Цитата:

However, that is completely wrong. Try this test:

a = [];
t = getTimer();
for(var i=0; i<100000; i++){
a[i] = 1;
}
trace(getTimer()-t); // 2555

And compare to this:

a = [];
t = getTimer();
for(var i=0; i<100000; i++){
a.push(1);
}
trace(getTimer()-t); // 2241 (!!)

If you're on a slow machine, you might like to reduce the number of loops, to prevent a script timeout.
И кто после этого говорит об одинаковом времени исполнения?

Dindin 24.05.2004 14:20

Там же под той же датой встречаем такие статьи, как:
"Flash Player Performance on OS X"
"Flash Player speed optimisations are platform dependent"

И вообще, там много решений как по оптимизации скриптов, так и по оптимизации работы плеера в разных ОС. Если уж humble opinion тех, кто отвечает Вам, уважаемый xintrea, Вас не устраивает, обращаетесь к столь любимым Вами буржуйским источникам. И не морочьте голову.

ЗЫ спасибо nuran'у за ссылку. Беру назад свои слова о чайниках


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

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