2

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

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

4

3 回答 3

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;
    }
于 2014-04-12T00:22:18.313 回答
0

我没有使用 browscap-php 库,但是 Browser Capabilities Project 强烈推荐使用。http://browscap.org/

GitHub 上的库应该可以提高性能。

于 2014-04-11T23:44:32.577 回答
0

我知道我来晚了,但就其价值而言,我在我的一个项目中使用了browscap-php库(如@AbcAeffchen 所述),到目前为止我很高兴。

一个典型的查找(根据我自己的简单测量)在 1 核 512MB 云实例上大约需要 20~30 毫秒(这几乎是你可以在任何地方找到的最小值)。我选择使用 Redis 进行缓存,这将查找时间缩短到几毫秒……因此,如果您确实需要,可以进行优化。

仅便利性就值得一试。

于 2014-08-13T18:01:34.257 回答