我们get_browser()
在 PHP 中使用,php_browscap.ini
但性能很糟糕。我们将 100 个左右的用户代理传入get_browser()
每个页面,渲染页面需要 30 多秒。我们需要一个高性能的解决方案,而不是持久存储实际get_browser()
结果(我们只想存储用户代理)。
我们已经使用了 memcached,有没有一种方法可以改变get_browser()
缓存结果,或者将整个加载php_browscap.ini
到 memcached 中。
最终推出了我们自己的解决方案:
////
// 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;
}
我没有使用 browscap-php 库,但是 Browser Capabilities Project 强烈推荐使用。http://browscap.org/
GitHub 上的库应该可以提高性能。
我知道我来晚了,但就其价值而言,我在我的一个项目中使用了browscap-php库(如@AbcAeffchen 所述),到目前为止我很高兴。
一个典型的查找(根据我自己的简单测量)在 1 核 512MB 云实例上大约需要 20~30 毫秒(这几乎是你可以在任何地方找到的最小值)。我选择使用 Redis 进行缓存,这将查找时间缩短到几毫秒……因此,如果您确实需要,可以进行优化。
仅便利性就值得一试。