Pentiums Posted December 28, 2009 Report Share Posted December 28, 2009 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) Quote Link to comment Share on other sites More sharing options...
briedis Posted December 28, 2009 Report Share Posted December 28, 2009 http://lzone.de/articles/php-string-search.htm Laikam jau ātrākais būs strstr tavam gadījumam... Quote Link to comment Share on other sites More sharing options...
2easy Posted December 28, 2009 Report Share Posted December 28, 2009 (edited) 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 December 28, 2009 by 2easy Quote Link to comment Share on other sites More sharing options...
rausis Posted December 28, 2009 Report Share Posted December 28, 2009 ereg php 5.3 versijā ir deprecated, php6 tas jau būs izņemts... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.