我們在PHP中使用get_browser()
,使用php_browscap.ini
,但性能非常糟糕。我們將100個左右的用戶代理傳遞給每個頁面get_browser()
,並且需要30多秒來渲染頁面。我們需要一個高性能的解決方案,而不會永久存儲實際的結果(我們只想存儲用戶代理)。提高php get_browser()性能
我們已經使用了memcached,有沒有辦法改變get_browser()
來緩存結果,或者將整個php_browscap.ini
加載到memcached中。
我們在PHP中使用get_browser()
,使用php_browscap.ini
,但性能非常糟糕。我們將100個左右的用戶代理傳遞給每個頁面get_browser()
,並且需要30多秒來渲染頁面。我們需要一個高性能的解決方案,而不會永久存儲實際的結果(我們只想存儲用戶代理)。提高php get_browser()性能
我們已經使用了memcached,有沒有辦法改變get_browser()
來緩存結果,或者將整個php_browscap.ini
加載到memcached中。
我並沒有使用browscap-php library,但瀏覽器功能項目高度推薦使用該功能。 http://browscap.org/
GitHub上的庫文件應該可以提高性能。
端了滾動我們自己的解決方案:
////
// 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庫(由@AbcAeffchen提到)在我的一個項目中,我很高興到目前爲止。
一個典型的查找(從我自己的簡單的度量)在一個1核心512MB雲實例(這幾乎是您可以在任何地方找到的最小值)大約需要20到30ms。我選擇使用Redis緩存,這將查找時間縮短到幾毫秒......所以如果您真的需要,可以進行優化。
只有便利性使它值得一試。
這裏你的緩存命中率是多少?很難說瀏覽器有多獨特,因此這種方法有多麼值得... –