go to bug id or search bugs for
$time_start = microtime(true);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "get_browser takes $time sec";
Less than 50 ms...
get_browser takes 3.3583149909973 sec
Add a Patch
Add a Pull Request
I've added the version number of OS X.
I think you are using large browscap.ini. Although browscap.ini is cached in memory, the code searching matched entry is not so fast. If database is large, it takes time. (About 2 sec with debug build CLI server & Core i7 4770S using full_php_browscap.ini)
Try lite_php_browscap.ini if you need performance.
I'm using php_browscap.ini (16,301 KB), not the full one full_php_browscap.ini (33,714 KB).
I've upgraded to PHP7.0.0RC3 and it's the same.
Is it better to use the browscap-php library (https://github.com/browscap/browscap-php) as recommended in http://browscap.org/ ?
I though it was better to use native PHP...
I detected the get_browser command as the lack of performance on my website today. Then I've found this bug here.
Could you please implement a hashmap or something similar for that command?
I cannot believe that searching through an ini file needs so much time.
You could for example split the search up and delegate it to multiple threads.
Here is my example:
$dTime1 = microtime(true);
$oBrowser = get_browser('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0');
$dTime2 = microtime(true);
$oBrowser2 = get_browser('DoesntExist');
$dTime3 = microtime(true);
echo sprintf('%.4f', $dTime2 - $dTime1), "<br>";
echo sprintf('%.4f', $dTime3 - $dTime2), "<br>";
Searching for a non-existent entry still requires so much time like the regular search (> 1 second).
Hi, I have tested your code but every time it's not take more that 40ms. Could you please test it again
It's better with RC7 : get_browser takes 1.1309630870819 sec
but it's not 40 ms ;)
Sorry, I've made a mistake :
- the result on the last comment "get_browser takes 1.1309630870819 sec" was with PHP 5.6.15
With PHP7.0RC7 :
get_browser takes 4.4257979393005 sec
The PHP browscap file is php_browscap.ini (size: 21664 kb)
New test :
PHP 7.0.1 : get_browser takes 1.5893349647522 sec
PHP 5.6.16 : get_browser takes 1.4182159900665 sec
It seems to be OK now.
> It seems to be OK now.
I was wrong : the performance are really bad even with last versions, so I used php_browscap (https://github.com/browscap/browscap-php).
Thanks for reply
> I was wrong : the performance are really bad even with last
> versions, […]
Well, then the ticket should be re-opened. :)
I just did some quick measurements with php_browscap.ini (~8.5 MB)
looking for one of the first and one of the last entries. Results
PHP-5.6: 0.01 resp. 0.62
master: 0.01 resp. 2.98
So, indeed, there is a huge performance *regression*. This doesn't
appear to be related to ZendMM, because without it I get similar
Resolved by https://github.com/php/php-src/pull/2242. This should make get_browser() with a large browscap.ini faster by a factor of 100x or so.