Выбор библиотеки PHP на основе производительности
Здесь обсуждается выбор библиотек для распознавания веб-сканеров (краулеров) в PHP с акцентом на их производительность в приложении Shopware. Рассматриваются три варианта: встроенная функция PHP get_browser, а также специализированные библиотеки jaybizzle/crawler-detect и matomo/device-detector.
Для тестирования скорости этих решений был написан код, который проверяет около 2700 пользовательских агентов. Инструмент профилирования Tideways помог определить производительность каждой библиотеки. Результаты показали, что функция get_browser работает значительно медленнее, чем сторонние библиотеки, и не подходит для реальных запросов.
Обе специализированные библиотеки показали схожую производительность с разницей в 12%: crawler-detect выполнилась за 767 мс, а device-detector — за 685 мс. Однако, при тестировании на одиночных запросах (один HTTP-заголовок), matomo/device-detector оказалась в 10 раз медленнее из-за инициализации регулярных выражений, что добавляет около 18 мс к каждому запросу. В то же время jaybizzle/crawler-detect генерирует регулярные выражения на этапе сборки, что позволяет обрабатывать запросы быстрее.
В итоге, для задачи определения краулера по одному запросу лучше подходит библиотека jaybizzle/crawler-detect с задержкой в 2 мс. matomo/device-detector, несмотря на её относительную медлительность в данном случае, может быть полезной для анализа большого количества запросов в фоновом режиме, где скорость работы с одиночными запросами не столь критична.
Post #4868
2.73K