PDA

Просмотр полной версии : AS 2.0 против AS 3.0. Кто быстрее?


Agro
24.12.2006, 13:38
Здравствуйте.

Меня интересует такой вопрос. Действительно ли в AS 3.0 простейшие операции, такие как сложение, умножение и т.п., выполняются быстрее, чем в AS 2.0, или просто мой комп глючит? Да и вообще хотелось бы знать, кто-нибуть проводил подобные исследования? Если проводил, то интересно было бы узнать о результатах. Заранее благодарен.

etc
24.12.2006, 14:23
AS3 вообще и в целом много быстрее.

http://dev.etcs.ru/blog/shit/particles2/ — без проблем таскает ≈10000 объектов в цикле каждый кадр.

Nirth
24.12.2006, 14:41
Уже как полтора года, люди говорят о том что ActionScript 3.0 Быстрее чем вторая версия =) быстрее третий ActionScript от 10 до 1000 раз.
Например ас3 может отпарсить 3ds файл с 16 тысячами полигонов и вывести результат на экран за 0.8 секунды на пне 2.4 гига =)

Agro
24.12.2006, 14:46
Спасибо. Жаль только, что нет совместимости между AS 2.0 и AS 3.0 .

Nirth
24.12.2006, 14:53
Есть, через LocalConnection.

Agro
24.12.2006, 15:09
Я не про это. Нельзя взять код написанный на AS 2.0 добавить пару новых классов из AS 3.0 и скомпелировать как AS 3.0 . Новые классы можно даже не добавлять, просто старый код на AS 2 нельзя компилировать под AS 3, для увеличения скорости...

Nirth
24.12.2006, 15:18
весь код из ас2 можно портировать в ас3, при условии что код был написан на чистом ас2 (без всяких this["mc"] и кода в кадрах и прототипов).

Agro
24.12.2006, 15:27
Ну и как ты, к примеру, скомпелипуешь Camera.get() в AS 3.0?

etc
24.12.2006, 15:38
Agro, как обычно — прочитав хелп по теме :)

Agro
24.12.2006, 16:06
Да нет, просто в AS 3.0 нет такого метода get() для класса Camera, а есть метод getCamera(). Поэтому при попытке скомпилировать Camera.get() в AS 3.0, компелятор выдаст ошибку. И это не единственное различие между AS 2 и AS 3.

Nirth
24.12.2006, 16:35
уффф, если твой вопрос - есть ли халява, то ответ - как всегда нету.

miramax
24.12.2006, 16:36
Читаем раздел хелпа ActionScript 2.0 Migration

MerlinTwi
24.12.2006, 17:57
Где-то я в сети недавно видел программу, которая перегоняет скрипты из AS2 в AS3, собирает классы в пакеты и учитывает ActionScript 2.0 Migration. Наверное, если покопаться в гугле можно найти. Я тогда не стал интересоваться этой программой, из-за не надобности...

WindWalker
25.12.2006, 17:53
Сегодня как раз решил сравнить быстродействие AS 3.0 и AS 1.0
(понятно, что между AS 2.0 и AS 1.0 разница незначительная).

Смысл простой: в цикле увеличиваем число на единицу.

Код на AS 3.0:
import flash.text.TextField;
var s:int = 0;
var i:int;
var t1:int = getTimer();
var t2:int;

for (i=0; i<100000000; i++) {
s++;
}
t2 = getTimer();

var myText:TextField = new TextField();
myText.text = s/(t2-t1)*1000;
this.addChild(myText);

Код на AS 1.0:
var s = 0;
var t1 = getTimer();

for (i=0; i<1000000; i++) {
s++;
}
t2 = getTimer();

var myText = _root.createTextField("",0,0,0,400,100);
myText.text = s/(t2-t1)*1000;

Таким образом, на экран будет выдваться сколько раз выполняется операция ++ за одну секунду.

Результат на моём компе (округлил до целых).

AS 3.0: 194931774
AS 1.0: 297353

Разница в 655 раз!



Для сравнения решил посмотреть то же самое на Java.
Код:

import java.util.Date;
public class TestCasting {
public static void main(String[] args) {
int s = 0;
long t1 = new Date().getTime();
for (int i=0; i<100000000; i++) {
s++;
}
long t2 = new Date().getTime();

System.out.println("speed:"+(double)s / (t2 - t1) * 1000);

}
}

Результат: 236966824
То есть всего на 20% быстрее, чем AS 3.0

P.S.
Надеюсь в 10-м флеше они прикрутят OpenGL, чтобы и графика тоже поживее работала.

DarkLight
25.12.2006, 18:02
1. В Ас1 помойму на 2 нолика меньше в цикле:)
2. Насколько я помню, Flash Player 8 powered by OpenGL...

Nirth
25.12.2006, 18:10
DarkLight у вас глюки, если бы 2 пункт был правильным, в интернете бы уже делали 3д шутеры на флэше, и никто бы не думал что маски или прозрачность могут тормозить =)

WindWalker
25.12.2006, 18:17
1. В Ас1 помойму на 2 нолика меньше в цикле:)

Там сперва было на 2 нолика больше, но постоянно выскакивало сообщение про то, что цикл выполняется слишком долго и надо бы его остановить.
Поэтому уменьшил на два нолика.
Вот и получается, что AS3.0 считает до 100 миллионов за полсекунды, а AS1.0 до миллиона за три секунды.
DarkLight у вас глюки, если бы 2 пункт был правильным, в интернете бы уже делали 3д шутеры на флэше, и никто бы не думал что маски или прозрачность могут тормозить =)
На Директоре уже делают. :)

Nirth
25.12.2006, 18:39
На директоре очень много чего делают =)

miramax
25.12.2006, 20:58
2WindWalker
В каком то посте я писал аналогичный код:
Кстати, такая конструкция
var i:int =0;
while( i < 10000000) i+=1

почти в два раза быстрее, именно потому что "i+=1".
http://as3.ru/?p=5

Может АС3 считает почти так же как жава, но уж точно отстаёт в разы в доступе к полям других объектов. Т.е. медленее вызываются методы из других объектов и проч. межобъектовые операции.

DarkLight
26.12.2006, 01:28
DarkLight у вас глюки, если бы 2 пункт был правильным, в интернете бы уже делали 3д шутеры на флэше, и никто бы не думал что маски или прозрачность могут тормозить =)

Проверил про 2 пункт...глючит малость... он частично верен только для Safari

To improve playback of video and large content and lower CPU usage, Flash Player 8 uses some OpenGL features when run in Safari on Mac OS X 10.2 and above. This is not full support of OpenGL; the player takes advantage of specific features to get bits on the screen faster. Using OpenGL improves video playback and animation, and reduces tearing or horizontal redraw lines.

etc
26.12.2006, 02:25
Ну это уже особенности реализации плеера под макось.

DarkLight
26.12.2006, 02:47
А вообще плеер под макосью по быстродействию отличается от того, который под винду и линуксового? И если да, под какой осью он быстрее?

etc
26.12.2006, 02:55
Под Линуксом не знаю, а под Макосью помедленнее, пожалуй. Да и вообще флеш в целом на маках не шустро работает. (Если в Rosetta, то вообще без комментариев).

WindWalker
27.12.2006, 01:48
2WindWalker
Кстати, такая конструкция почти в два раза быстрее, именно потому что "i+=1".
http://as3.ru/?p=5
Забавная фишка!
Может быть в последующих версиях исправят, потому что нелогично как-то.

Может АС3 считает почти так же как жава, но уж точно отстаёт в разы в доступе к полям других объектов. Т.е. медленее вызываются методы из других объектов и проч. межобъектовые операции.
Странно. Адобовцы вроде обещали, что теперь объекты перестанут быть хеш-таблицами. Ну я, погоревав немного от этой новости (уж больно мне нравилось использовать объекты в таком качестве), отешился тем, что доступ к полям должен на порядок ускорится.
Хотя, возможно, там ещё где-то тормоза какие-то остались.

Вообще, виртуальная машина ещё пока молодая. Наверняка там ещё огромный простор для оптимизации.

Надо будет как-нибудь на досуге в Тамарине поколупаться. Шансов, что что-то пойму мало, но чем чёрт не шутит.
Всё таки интересно, какие нативные коды в итоге получаются, и как вообще там всё внутри устроено.

Usnul
27.12.2006, 19:26
АС3 где-то в 2-3 раза быстрее выполняет математические функции судя по моим наблюдениям.

miramax
27.12.2006, 19:42
АС3 где-то в 2-3 раза быстрее выполняет математические функции судя по моим наблюдениям.А по моим раз в 20-50.
С битмап датой скорость работы возросла где-то в двое, а вот с векторной отрисовкой практически ничего не изменилось.
Но для такого ускорения нужно писать строго типизированный код.

Usnul
30.12.2006, 06:54
А по моим раз в 20-50.
С битмап датой скорость работы возросла где-то в двое, а вот с векторной отрисовкой практически ничего не изменилось.
Но для такого ускорения нужно писать строго типизированный код.
векторная отрисовка немного лучше стала по моим ощущениям, опять же, все только по памяти, но где-то в 1.5-3 раза быстрее рендер идет.

насчёт типов согласен. но они применимы лишь в дискретных алгоритмах, и то, это лишь в сравнении с АС1. Операции с целыми числами в частности по скорости получили серьёзный тычек по сравнению с АС2, float же особо не изменился. Класс uint меня вообще смущает, его использование настолько лимитировано что я уже не помню когда в последний раз его использовал.

Вообще конечно язык сам по себе тут почти не причём, это заслуги компилятора.