改进php get_browser()性能

时间:2014-04-11 23:27:26

标签: php browscap

我们在PHP中使用get_browser()使用php_browscap.ini,但性能非常糟糕。我们每页将100个左右的用户代理传递到get_browser(),渲染页面需要30秒以上。我们需要一个高性能的解决方案,而不会持久存储实际的get_browser()结果(我们只想存储用户代理)。

我们已经使用了memcached,有没有办法可以改变get_browser()来缓存结果,或者将整个php_browscap.ini加载到memcached中。

3 个答案:

答案 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进行缓存,这使查询时间缩短到几毫秒......因此,如果您确实需要,可以进行优化。

仅凭便利性值得一试。