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.
<?php $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.
<?php /* * * (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.
<?php $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.
0 comments:
Post a Comment