Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   AS 2.0 против AS 3.0. Кто быстрее? (http://www.flasher.ru/forum/showthread.php?t=89813)

Agro 24.12.2006 13:38

AS 2.0 против AS 3.0. Кто быстрее?
 
Здравствуйте.

Меня интересует такой вопрос. Действительно ли в 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

Цитата:

Сообщение от DarkLight
1. В Ас1 помойму на 2 нолика меньше в цикле:)

Там сперва было на 2 нолика больше, но постоянно выскакивало сообщение про то, что цикл выполняется слишком долго и надо бы его остановить.
Поэтому уменьшил на два нолика.
Вот и получается, что AS3.0 считает до 100 миллионов за полсекунды, а AS1.0 до миллиона за три секунды.
Цитата:

Сообщение от Nirth
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

Цитата:

Сообщение от Nirth
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

Цитата:

Сообщение от miramax
2WindWalker
Кстати, такая конструкция почти в два раза быстрее, именно потому что "i+=1".
http://as3.ru/?p=5

Забавная фишка!
Может быть в последующих версиях исправят, потому что нелогично как-то.

Цитата:

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

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

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

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

Usnul 27.12.2006 19:26

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

miramax 27.12.2006 19:42

Цитата:

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

А по моим раз в 20-50.
С битмап датой скорость работы возросла где-то в двое, а вот с векторной отрисовкой практически ничего не изменилось.
Но для такого ускорения нужно писать строго типизированный код.

Usnul 30.12.2006 06:54

Цитата:

Сообщение от miramax
А по моим раз в 20-50.
С битмап датой скорость работы возросла где-то в двое, а вот с векторной отрисовкой практически ничего не изменилось.
Но для такого ускорения нужно писать строго типизированный код.

векторная отрисовка немного лучше стала по моим ощущениям, опять же, все только по памяти, но где-то в 1.5-3 раза быстрее рендер идет.

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

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


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

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