Jump to content
php.lv forumi

eregi vs strstr vs strpos


Pentiums

Recommended Posts

kura funkcija ātrāk izpilda vienkārša teksta pārbaudi bez regulārās izteiksmes? (vajag pārbaudīt vai ip adrešu murskulis nesatur konkrētu ip adresi)

Link to comment
Share on other sites

vnk nevarēju atturēties neatbildēt uz šo :D:D:D

$gnTime = 0;
function timeu() {list($sSecU, $sSec) = explode(' ', microtime()); return $sSec + $sSecU;}  // izdod pašreizējo laiku: sekundes + mikrosekundes (aiz "komata")
function timerSet() {global $gnTime; $gnTime = timeu();}
function timerGet() {global $gnTime; return round(timeu() - $gnTime, 6);}
function timerEcho($sInfo = '') {printf('%s%.4f<br />', $sInfo, timerGet());}  // parāda laiku ar precizitāti līdz 100 mikrosekundēm (ilgākām darbībām). lielākas precizitātes mērījumiem desmitos mikrosekunžu (vai vēl mazāk) ir jāņem vērā arī pašas funkcijas izsaukuma laiks (tb tad būtu jāaprēķina function call overhead)

function ipRand() {return rand(0, 255) . '.' . rand(0, 255) . '.' . rand(0, 255) . '.' . rand(0, 255);}
function ipLoad() {  // izveido testa datus: failu ar 100 000 random ip adresēm (atdalītas ar komatu)
$h = fopen('ip.txt', 'w');
for ($i = 0; $i < 100000; $i++) fwrite($h, ($i ? ',' : '') . ipRand());
fclose($h);
}
function ipLoadTimer() {  // ielādē datus un parāda, cik tas paņem laiku
timerSet();
ipLoad();
timerEcho('IP ielāde: ');
}
function ipSrchTimer() {  // noskaidro, ar kuru funkciju var ātrāk atrast ip adresi (vispārīgāk: kā ātrāk stringā atrast citu stringu)
$s = file_get_contents('ip.txt');
$sIp = substr($s, -1 * (strlen($s) - strrpos($s, ',') - 1));  // paņem pēdējo ip, kuru tad arī pēc tam "meklē" (tas nekas, ka tā atkārtojas arī kkur pa vidu)
$sIp2 = '111.222.333.444';  // lai rezultāti būtu objektīvāki, meklē gan ip, kas ir, gan "ip", kas tur noteikti nav

timerSet();
$b11 = (bool) ereg($sIp, $s);
timerEcho('ereg(): ');
timerSet();
$b12 = (bool) ereg($sIp2, $s);
timerEcho('ereg(): ');

timerSet();
$b21 = (bool) preg_match('/' . $sIp . '/', $s);
timerEcho('preg_match(): ');
timerSet();
$b22 = (bool) preg_match('/' . $sIp2 . '/', $s);
timerEcho('preg_match(): ');

timerSet();
$b31 = strstr($s, $sIp) !== false;
timerEcho('strstr(): ');
timerSet();
$b32 = strstr($s, $sIp2) !== false;
timerEcho('strstr(): ');

timerSet();
$b41 = strpos($s, $sIp) !== false;
timerEcho('strpos(): ');
timerSet();
$b42 = strpos($s, $sIp2) !== false;
timerEcho('strpos(): ');
}

ipLoadTimer();  // izpilda 1x, lai ielādētu testa datus (pēc tam aizkomentē)
ipSrchTimer();  // izpilda daudzreiz, kamēr iegūst pietiekami ticamu vidējā laika novērtējumu
/*
aptuvens vidējais rezultāts uz mana pc:
IP ielāde:    1.7000
ereg():       0.0150
ereg():       0.3500
preg_match(): 0.0010
preg_match(): 0.0250
strstr():     0.0025
strstr():     0.0100
strpos():     0.0003
strpos():     0.0100
*/

vietu sadalījums pēc ātrākajām funkcijām kopvērtējumā (meklēšana ar pozitīvu/negatīvu atrašanas rezultātu)

iekavās ir ātruma uzlabojums (n-reizes), salīdzinot ar lēnāko

1) strpos() (35x)

2) strstr() (29x)

3) preg_match() (14x)

4) ereg() (1x)

 

šajā testā strpos() izrādījās 35x ātrāka par ereg()!!! :D:D:D

kr4 ereg()/eregi() ir slow ass. dont use em :P

strpos() ftw

Edited by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...