我们在PHP中使用get_browser()
使用php_browscap.ini
,但性能非常糟糕。我们每页将100个左右的用户代理传递到get_browser()
,渲染页面需要30秒以上。我们需要一个高性能的解决方案,而不会持久存储实际的get_browser()
结果(我们只想存储用户代理)。
我们已经使用了memcached,有没有办法可以改变get_browser()
来缓存结果,或者将整个php_browscap.ini
加载到memcached中。
答案 0 :(得分:2)
结束我们自己的解决方案:
////
// This function caches in memcached.
////
public static function get_browser_memcached($user_agent) {
if(empty(MemcacheConnection::$memcache_connection)) {
MemcacheConnection::connect();
}
$memcache_key = preg_replace('/\s+/', '', sha1($user_agent)) . "_user_agent";
$memcache_result = MemcacheConnection::get($memcache_key);
if($memcache_result !== false) {
return $memcache_result;
}
$browser = get_browser($user_agent);
//Store in Memcached (cached for 7 days)
MemcacheConnection::set($memcache_key, $browser, 604800);
return $browser;
}
答案 1 :(得分:0)
我没有使用 browscap-php library ,但浏览器功能项目强烈推荐这种用法。 http://browscap.org/
GitHub上的库将改善性能。
答案 2 :(得分:0)
我知道我迟到了,但是为了它的价值,我使用了 browscap-php 库(如前所述) @AbcAeffchen)在我的一个项目中,到目前为止我很高兴。
典型的查找(来自我自己的简单测量)在1核512MB云实例上大约需要20~30ms(这几乎是你可以在任何地方找到的最小值)。我选择使用Redis进行缓存,这使查询时间缩短到几毫秒......因此,如果您确实需要,可以进行优化。
仅凭便利性值得一试。