get_browser замедляет загрузку страницы, есть альтернатива?

Я использовал PHP get_browser работаю уже довольно давно и никогда не замечал никаких задержек ни на одном из моих сайтов. Тем не менее, недавно я заметил, что один из моих сайтов загружал серверную часть примерно на секунду больше, чем нужно. Я закомментировал get_browser Функция и страница загружаются мгновенно.

Может ли это быть связано с моим сервером или get_browser функция известна как медленная? Этот веб-сайт является единственным веб-сайтом, который у меня работает на сервере Windows. Может ли это быть проблемой? Или это может быть связано с моим файлом browscap.ini (он обновляется каждый день с http://browsers.garykeith.com/)?

Если я ничего не могу сделать, чтобы ускорить get_browser функция, есть ли альтернативы этому? Мне нужно надежно собрать следующую информацию о браузере:

  1. Что это за браузер, т.е. Chrome, IE, Safari и т. Д.
  2. Что это за версия (полностью), т.е. 10.1 и т. Д.
  3. Будь то гусеничный или бот

Я не знаю каких-либо других методов сбора этой информации от пользовательского агента, было бы лучше использовать javascript (я бы предпочел не так, как мне нужно на стороне сервера значений)?

4 ответа

Решение

Я также испытываю около 5 секунд задержки при использовании get_browser поэтому я также искал другое решение.

То, что прекрасно работает и наверняка будет в курсе в течение длительного времени, - это библиотека в piwik:

Этот класс пригодится: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/. Я использую его во многих своих проектах, и он не использует get_browser, вместо этого он смотрит на userragent браузера. Я обновил свою версию с помощью браузера Windows Phone, вы можете скачать ее по адресу: http://cl.ly/code/1V3E1k1G3B25.

В настоящее время полный файл browscap.ini для PHP имеет размер около 10 МБ. Один вызов get_browser() или других методов, обращающихся к этой "базе данных", требует смехотворно большого количества ресурсов.

Вот почему я изменил формат и импортировал данные в базу данных MySQL. Я написал два простых скрипта, которые позволяют мне легко обновлять базу данных при выходе нового browscap.ini. Первый сценарий генерирует структуру таблицы из файла browscap.ini - второй сценарий отправляет таблицу на стол. Если вы заинтересованы в сценариях, пожалуйста, сообщите мне в комментариях ниже, и я буду загружать их для вас. Они полны спагетти, но они работают.

Поскольку браузеры не склонны меняться во время сеанса, вы должны извлекать данные из browscap.ini только один раз за сеанс, а затем сохранять их.

Пока мне не удалось найти подходящую альтернативу get_browser функции, и я не смог найти, почему это медленно на моем сервере Windows, а не на моем Linux.

На данный момент я буду применять базовый метод обхода файлов cookie. При первом посещении моего сайта я сохраню данные браузера в файле cookie, а затем извлекаю их с этого момента. Это быстрее, чем при использовании get_browser функция на данный момент.

Если у кого-то есть другие решения, пожалуйста, прокомментируйте или опубликуйте их

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