Arrayzugriff vs. direkte Methoden bei ArrayObjekt-Klassen
Dieser Benchmark prüft N mal, ob der Zugriff auf ein von ArrayObjekt abgeleitetes Objekt schneller ist, wenn man die Methoden (offsetGet bzw. offsetSet) oder die Arraysyntax nutzt. Das Ergebnis beim Durchlauf mit PHP 5.2.6 auf Vista x64:
Duration for array access (set) : 0.53046822547913 s
Duration for method access (set): 0.58158802986145 s
Duration for array access (get) : 0.43402695655823 s
Duration for method access (get): 0.50619602203369 s
Es zeigt sich also, dass der Arrayzugriff immer schneller ist. Und das ist auch gut so, darum implementieren wir ja den ganzen Kram ;-)
<?php
class MyArray extends ArrayObject {
private $data;
public function __construct() {
$this->data['key1'] = 'value1';
}
public function offsetGet($index) {
return $this->data[$index]; // isset($this->data[$index]) ? $this->data[$index] : null;
}
public function offsetSet($index, $value) {
$this->data[$index] = $value;
return $value;
}
}
function randstr($len) { return substr(md5(uniqid()),0,$len); }
set_time_limit(0);
$maxRounds = 100000;
$arrayObj = new MyArray();
$data = array();
$f = '';
for ( $i = 0; $i < $maxRounds; ++$i ) {
$data[] = array(randstr(12), randstr(10));
}
$startArraySet = microtime(true);
for ( $i = 0; $i < $maxRounds; ++$i ) {
$arrayObj[$data[$i][0]] = $data[$i][1];
}
$endArraySet = microtime(true);
for ( $i = 0; $i < $maxRounds; ++$i ) {
$f = $arrayObj[$data[$i][0]];
}
$endArrayGet = microtime(true);
for ( $i = 0; $i < $maxRounds; ++$i ) {
$arrayObj->offsetSet($data[$i][0], $data[$i][1]);
}
$endMethodSet = microtime(true);
for ( $i = 0; $i < $maxRounds; ++$i ) {
$f = $arrayObj->offsetGet($data[$i][0]);
}
$endMethodGet = microtime(true);
echo "Duration for array access (set) : ".($endArraySet-$startArraySet)." s\n";
echo "Duration for method access (set): ".($endMethodSet-$endArrayGet)." s\n";
echo "Duration for array access (get) : ".($endArrayGet-$endArraySet)." s\n";
echo "Duration for method access (get): ".($endMethodGet-$endMethodSet)." s\n";
?>
Snippetdetails
- hinzugefügt: 25.11.2008
- aktualisiert: 25.11.2008
- Snippet herunterladen
Kommentar verfassen
Fehler gefunden? Doofer Code? Ein kleines "Danke!"? Hinterlasse einfach einen Kommentar.
Dein Kommentar wird erst nach einer manuellen Prüfung angezeigt.