Улучшение производительности php get_browser()

Мы используем get_browser() в PHP используя php_browscap.ini но производительность ужасна. Мы передаем около 100 пользовательских агентов в get_browser() на страницу, и рендеринг страницы занимает более 30 секунд. Нам нужно качественное решение без сохранения фактического get_browser() результаты постоянно (мы хотим хранить только пользовательские агенты).

Мы уже используем memcached, есть ли способ, которым мы можем изменить get_browser() для кэширования результатов или загрузки всего php_browscap.ini в memcached.

3 ответа

Закончилось сворачивание нашего собственного решения:

    ////
    // 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) в одном из моих проектов, и я счастлив до сих пор.

Типичный поиск (по моим собственным простым измерениям) занимает около 20~30 мс на 1-ядерном 512 МБ облачном экземпляре (что в значительной степени является минимумом, который вы можете найти где угодно). Я решил кешировать с помощью Redis, и это сокращает время поиска до пары мс... так что можно оптимизировать, если вам действительно нужно.

Одно только удобство делает это попыткой.

Другие вопросы по тегам