Warum ihr euch Phalcon 2 und Zephir ansehen solltet

Nachdem Phalcon 2 jetzt stable ist und ein paar Patches die letzten Kinderkrankheiten beseitig haben, bin ich kürzlich von Version 1 auf 2 umgestiegen.

Mit an Bord ist auch die neue Programmiersprache Zephir mit der eigene PHP-Module geschrieben werden können. In diesem Beitrag zeige ich euch mit einem kleinen Benchmark was das bringen kann.


Was ist Zephir?

Zephir versucht die Vorteile von PHP und C++ zu verbinden. Die Sprache ist von der Syntax her stark an PHP angelehnt und jeder PHPler wird sich schnell zurecht finden. Sie kompiliert in normalen C++ Code und überläßt gcc den Rest. Wer es genau wissen will, findet die Dokumentation hier.

Der PHP-Code für den Benchmark

Nichts spektakuläres, nur ein Array, in dem wir alles hashen.

function benchPhp(array $array)
{
	foreach ($array as $idx => $value) {
		$array[$idx] = sha1($value);
	}
}

Der Zephir Code für den Benchmark

Zephir benötigt zwingend Namespace und Klasse, also tun wir ihm den Gefallen.

namespace Bench;

class Bench {
	public function testBench1(array arr) {
		var i; var item;

		for i, item in arr {
			let arr[i] = sha1(item);
		}
	}
}

Der Benchmark

$runs  = 1000000;
$array = [];

for ($i = 0; $i < $runs; $i++) {
	$array[] = 'halbwegs langer string';
}

$start = microtime(true);
benchPhp($array);
$runtime = microtime(true) - $start;

echo "\n---------- PHP -----------\n   Runtime ", number_format($runtime * 1000, 0, ',', '.'), " ms\n--------------------------\n\n";

$start = microtime(true);
(new \Bench\Bench)->testBench1($array);
$runtime = microtime(true) - $start;

echo "\n--------- Zephir ---------\n   Runtime ", number_format($runtime * 1000, 0, ',', '.'), " ms\n--------------------------\n\n"

Das Ergebnis

---------- PHP -----------
   Runtime 1.048 ms
--------------------------


--------- Zephir ---------
   Runtime 525 ms
--------------------------

Je nach Aufgabenstellung kann also mit Zephir ein Performance-Boost von 50 % erreicht werden.

Was hat das jetzt mit Phalcon 2 zu tun?

Einfach: Phalcon 2 ist vollständig in Zephir geschrieben und ein PHP-Modul. Es genießt also genau die Geschwindigkeitsvorteile, die wir oben gesehen haben.


Mehr zum Thema Performance gibt’s hier.