PHPでのUserAgentパーサ(ブラウザ判定)ライブラリは何がいいかベンチマークしてみた

ブラウザ種別、バージョン、OSなどを判定する「UserAgentパーサ」について、PHPで利用できる以下の5つをベンチマークしてみました。

ベンチマーク環境

  • XAMPP 1.8.3-4 for Linux (32bit)
    • PHP 5.5.11
      • Zend OPcache v7.0.4-dev

ベンチマーク結果

1つのUserAgent文字列からブラウザの種類などを判定する処理についてのベンチマークです。

処理時間:
timeベンチマークのグラフ

get_browser()関数が非常に遅いです。Crossjoin\Browscapとwoothee-phpはバーが見えませんが、それだけ速いということです。

最大使用メモリ:
memoryベンチマークのグラフ

browscap-phpが非常にメモリを必要とします。get_browser()関数がもっともメモリ消費が少ないです。

実際の数値:

{
  "crossjoin-browscap":{"time":0.00087594985961914,"memory":524288},
  "get_browser":       {"time":1.3734579086304,    "memory":262144},
  "browscap-php":      {"time":0.13754391670227,   "memory":8388608},
  "ua-parser":         {"time":0.0085458755493164, "memory":524288},
  "woothee":           {"time":0.0011758804321289, "memory":524288}
}

結論

軽量高速なのは、以下の2つです。

  • Crossjoin\Browscap
  • woothee-php

browscap.iniを利用するものがよい場合はCrossjoin\Browscapが、多言語対応あるいは日本製がよい場合はwootheeがよいでしょう。

(2014-11-07 追記) ベンチマーク結果が状況により大きく異なることがわかりましたので、【訂正】PHPでのUserAgentパーサ(ブラウザ判定)ライブラリのベンチマークを書きました。

ベンチマーク方法

ベンチマーク方法については、以下のリポジトリで公開してます。

実際の環境でベンチマークされることをお薦めします。

なお、UserAgent文字列を判定した結果はcacheフォルダ内のoutput-*.txtnormalize-output-*.txt(出力を標準化したもの)にあります。

判定結果は同じbrowscap.iniを使うものでさえも微妙に異なりますので、ご自分のニーズに合っているか確認し、必要な場合は、バグ修正(バグ報告)や自分用パーサを追加してから使うことをお薦めします。

Date: 2014/11/06

Tags: php, benchmark