Движок удалось оптимизировать под FPC, чтобы скомпилированная версия под FPC была такая же быстрая как и под delphi. В некоторых случаях, версия движка под fpc может замедляться на 10% в сравнении с delphi версией + fastmm. Здесь приведены тесты движка под delphi + fastmm. Все тесты проводились в Win32 XP. 32битная версия. Но в linux скорость будет приблизительно такая же.
1. Тест на вызов пустого метода с 4 параметрами
Intel Celeron 2.0 M (ноут).
- Код: Выделить всё
- class x { function my($i,$a,$b,$c){ } }
 $obj = new x;
 $i = 100000;
 while($i--){
 $obj->my(1,1,1,1);
 $obj->my(1,1,1,1);
 $obj->my(1,1,1,1);
 $obj->my(1,1,1,1);
 }
PHP 5.2 - 3600 mlsec
Orion - 2200 mlsec
2. Тест на скорость конкатенации (переменная $i приводится к int)
- Код: Выделить всё
- $i = 1000000;
 while($i--)
 $str = $i . "test";
PHP 5.2 - 470 mlsec
Orion - 500 mlsec
3. Тест на скорость конкатенации 2 (с оператором ".=")
- Код: Выделить всё
- $i = 1000000;
 while($i--)
 $str .= "abcd----xyz";
PHP 5.2 - 500 mlsec
Orion - 390 mlsec
4. Тест на вызов нативных математических функций
- Код: Выделить всё
- $i = 1000000;
 while($i--)
 $r = tan(sin(cos($i)));
PHP 5.2 - 1250 mlsec
Orion - 850 mlsec
5. Тест на вызов пользовательской функции без параметров
- Код: Выделить всё
- function test(){ }
 $i = 300000;
 while($i--){
 test();test();test();test();
 }
PHP 5.2 - 500 mlsec
Orion - 300 mlsec
6. Тест на вызов пользовательской функции с 6 параметрами
- Код: Выделить всё
- function test($x,$y,$z,$a,$b,$c){ }
 $i = 300000;
 while($i--){
 test(1,1,1,1,1,1);
 }
PHP 5.2 - 680 mlsec
Orion - 260 mlsec
Orion FPC - 360 mlsec
7. Тест на пустой цикл for
- Код: Выделить всё
- for($i=0; $i<1000000; $i++){ }
PHP 5.2 - 100 mlsec
Orion - 170 mlsec
8. Создание объекта и чиста мусора
- Код: Выделить всё
- class X { }
 $i = 1000000;
 while($i--)
 $obj = new X;
PHP 5.2 - 1060 mlsec
Orion - 850 mlsec
9. Создание массива и чистка мусора
- Код: Выделить всё
- $i = 1000000;
 while($i--)
 $arr = array(1,2,3);
PHP 5.2 - 800 mlsec
Orion - 2200 mlsec
Orion FPC - 3900 mlsec
10. Создание списка массивов
- Код: Выделить всё
- $i = 30000;
 while($i--)
 $arr[] = array(1,2,3,4,5,6,7,8,9,10);
PHP 5.2 - 100 mlsec
Orion - 250 mlsec
Orion FPC - 400 mlsec
11. Доступ к полям объекта
- Код: Выделить всё
- class My { var $x = 10; }
 $i = 1000000;
 $obj = new My;
 while ($i--){
 $d = $obj->x + $obj->x + $obj->x;
 }
PHP 5.2 - 600 mlsec
Orion - 800 mlsec
12. Доступ к статическим полям класса
- Код: Выделить всё
- class My { static $x = 1; }
 $i = 1000000;
 while ($i--){
 My::$x = My::$x + My::$x + My::$x;
 My::$x = 0;
 }
PHP 5.2 - 2500 mlsec
Orion - 1200 mlsec
13. Доступ к константам
- Код: Выделить всё
- define('MY_X', 10);
 define('MY_Y', 20);
 define('MY_Z', 40);
 $i = 1000000;
 while ($i--){
 $d = MY_X + MY_Y + MY_Z + MY_X + MY_Y + MY_Z;
 }
PHP 5.2 - 700 mlsec
Orion - 440 mlsec
Добавлено спустя 2 часа 26 минут 32 секунды:
14. Доступ к константам класса
- Код: Выделить всё
- class z { const MY_Z = 1; }
 class y extends z { const MY_Y = 2; }
 class x extends y { const MY_X = 3; }
 $i = 300000;
 while ($i--){
 x::MY_X + x::MY_Y + x::MY_Z +
 x::MY_X + x::MY_Y + x::MY_Z;
 }
PHP 5.2 - 450 mlsec
Orion - 390 mlsec
Добавлено спустя 6 минут 6 секунд:
15. Вызов статического метода класса
- Код: Выделить всё
- class X {
 static function test($i,$i,$i){
 
 }
 }
 $i = 300000;
 while($i--){
 X::test(1,1,1);
 X::test(3.1,2.1,1.1);
 X::test(false,null,true);
 }
PHP 5.2 - 1450 mlsec
Orion - 800 mlsec
Добавлено спустя 13 минут:
16. Числа фибоначи, тестирование рекурсии
- Код: Выделить всё
- function fibo($n){
 if ($n < 2){
 return 1;
 } else {
 return fibo($n - 2) + fibo($n - 1);
 }
 }
 $n = 32;
 echo fibo($n);
PHP 5.2 - 7700 mlsec
Orion - 5250 mlsec
Добавлено спустя 29 минут 25 секунд:
Orion и PascalScript, что быстрее?
1. Цикл от 0 до 1000000
- Код: Выделить всё
- var
 i: integer;
 begin
 for i:=0 to 1000000 do
 begin
 end;
 end.
- Код: Выделить всё
- for($i=0; $i<1000000; $i++){ }
PascalScript - 600 mlsec
Orion - 170 mlsec
Добавлено спустя 3 минуты 38 секунд:
2. Скорость на вызов пользовательской функции
- Код: Выделить всё
- procedure test(x,y,z: integer);
 begin
 end;
 var i: integer;
 begin
 for i:=0 to 100000 do
 begin
 test(i,i,i);
 test(i,i,i);
 test(i,i,i);
 end;
 end.
- Код: Выделить всё
- function test($x,$y,$z){ }
 for($i=0;$i<100000;$i++){
 test($i,$i,$i);
 test($i,$i,$i);
 test($i,$i,$i);
 }
PascalScript - 450 mlsec
Orion - 190 mlsec
Добавлено спустя 7 минут 19 секунд:
Тест скорости операторов + - * / =
- Код: Выделить всё
- $z = 0;
 $x = 0;
 for($i=1;$i<100000;$i++){
 $x = $i + 2;
 $z = ($x * 5) / $i;
 }
- Код: Выделить всё
- var
 i: integer;
 x, z: integer;
 begin
 z := 0;
 x := 0;
 for i:=1 to 100000 do
 begin
 x := i + 2;
 z := (x * 5) / i;
 end;
 end.
PascalScript - 360 mlsec
Orion - 60 mlsec (6x быстрее)



