Движок удалось оптимизировать под 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 быстрее)