Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос по Муку (http://www.flasher.ru/forum/showthread.php?t=137858)

sersir 24.03.2010 04:00

Вопрос по Муку
 
Всем привет.
Объясните пожалуйста этот отрывок из Мука: "Код, размещаемый в инициализаторе класса, выполняется в режиме интерпретации, JIT-компилятор не компилирует его. Динамически откомпилированный код выполняется гораздо быстрее интерпретируемого кода, поэтому в тех случаях, когда на первом месте стоит вопрос производительности, код, интенсивно использующий ресурсы процессора, следует выносить за пределы инициализатора класса."

Заранее спасибо.

wvxvw 24.03.2010 04:14

ОК, когда AS компилируется, из него создается байткод. Байткод - это примитивные команды виртуальной машине плеера о том, что за чем нужно делать. Это своего рода AS Assembler. Дальше, когда этот байткод прочитвяется плеером, плеер должен создать из него исполняемую программу, делает он это с помощью JIT (Just in-Time compiler). Этот компайлер уже подготавливает машинный код, который и будет выполнятся вашими процессором, видео карточкой, оперативкой и т.д. JIT может делать определенные оптимизации по дороге, как, например, перекаст из числа с плавающей запятой в целое число (если такое возможно), кроме всего прочего, раз скомпилировав метод класса он его может закешировать и больше не трогать. А вот с конструктором так, по какой-то причине не происходит, и конструктор каждый раз прочитывается и компилируется в машинный код по-новой.

Только, пожалуйста, в следующий раз давайте теме более осмысленное название.

sersir 24.03.2010 05:17

спасибо за разъяснения

Котяра 24.03.2010 09:57

хм. т.е.конструкцию
Код AS3:

public function MyClass()
{
this.x =100;
}

лучше превратить в
Код AS3:

public function MyClass()
{
setX();
}
private function setX():void
{
this.x =100;
}

?

firsoff 24.03.2010 11:28

ага вот почему умные AS дядки говорили - "В конструкторе минимум кода!"

TanaTiX 24.03.2010 13:59

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

orcpochta 24.03.2010 14:44

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

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

wvxvw 24.03.2010 15:39

Котяра:
Ради одной операции - не стоит.

TanaTiX:
Речь идет о компиляции в машинные коды, это происходит всякий раз как нужно отобразить вашу SWF, а не тогда, когда она компилируется в байткод. JIT компилятор, вернее его версии используются в разных технологиях, например C#, Java, JavaScript - для того, чтобы запустить приложение на любом из этих языков его нужно перевести в машинные коды той платформы, на которой оно должно запустится, это и делаeт JIT компилятор.

Котяра 24.03.2010 18:34

насчёт одной операции понятно) это для примера)
другой вопрос насколько хорошо JIT компилятор вообще работает в swf. где что почитать можно?

wvxvw 24.03.2010 18:39

https://developer.mozilla.org/En/Nanojit


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

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