PHP: Menghitung lama eksekusi sebuah skrip
![](http://2.bp.blogspot.com/-JLzChwOBXv4/T0d_Jj8_HYI/AAAAAAAAArA/BGcIwYJeqeQ/ s1600/time.png)
Untuk apa menghitung lama eksekusi sebuah skrip? Alasan utama adalah performance dari skrip yang dibuat, hal ini bertujuan untuk membandingkan fungsi yang akan digunakan sehingga losstime bisa dikurangi. Dalam pemrograman PHP bisa dilakukan dengan mengambil nilai fungsi microtime(), tentu saja ditambahkan parameter boolean bernilai true agar nilai yang dikembalikan adalah float, karena jika tidak ada parameter yang diberikan maka nilai return dari fungsi ini adalah string.
Cara paling mudah adalah dengan membuat sebuah variabel dari nilai return fungsi microtime() di awal perintah yang ingin dijalankan, kemudian ambil lagi nilai yang sama dibawah perintah yang ingin dijalankan dengan variabel lain, dan selisih nilai variabel terakhir dengan yang pertama diambil tersebut adalah lama eksekusi skrip tersebut. Seperti dibawah ini.
$arr=array();
$start = microtime(true);
for ($x=0; $x<100; ++$x)
$arr[] = 'exec';
$end = microtime (true);
echo 'Selisih Waktunya adalah: ', $end - $start, ' microsecond';
?>
Kode diatas cukup simpel, berikut saya coba membuat sebuah class untuk menghitung lama eksekusi sebuah script yang ingin kita uji, sehingga bisa digunakan untuk membuat sebuah perbandingan.
/*
*
* (f) ExecTime.php
* (d) Menghitung lama eksekusi sebuah perintah
* (l) GPL
* (a) emaniacs
*
*/
class ExecTime {
private $_start=null;
// penanda bahwa object tidak bisa dipakai lagi.
private $_finish=false;
public function __construct($autoStart=true) {
if ($autoStart)
$this->start();
}
public function start() {
$this->_start = microtime (true);
}
public function end() {
// ambil end time
$end = microtime(true);
if ($this->_finish)
return false;
/* cek apakah start telah didefinisikan
* jika belum return array kosong
*/
if (is_null ($this->_start))
return array();
// set perbedaan waktu
$diff = $end - $this->_start;
$ret = array (
'start' => $this->_start,
'end' => $end,
'diff' => $diff,
);
// hapus nilai _start
$this->_flush();
return $ret;
}
public function restart() {
$this->start();
$this->_finish = false;
}
private function _flush() {
$this->_start = null;
}
}
?>
Sekarang saya buat sebuah file PHP untuk menghitung perbandingan eksekusi proses sebuah array menggunakan for dengan foreach.
$arr = range (1, 100);
include ('ExecTime.php');
$tmp = count($arr);
//inisialisasi object
$s1 = new ExecTime(false);
// hitung nilai waktu untuk looping array dengan menggunakan for
$s1->start();
for ($i=0; $i<$tmp; ++$i)
$arr[$i] = 'test';
print_r ($s1->end());
$s1->restart();
foreach ($arr as $k => $v)
$k='test';
print_r($s1->end());
?>
Berikut penampakan hasil kode diatas, sepertinya menggunakan foreach lebih cepat.
![](http://3.bp.blogspot.com/-IImq9cj3mf0/T0etTn2vTzI/AAAAAAAAArI/llVOmWm1lgY/ s1600/Screenshot+at+2012-02-24+22:29:01.png)