【问题标题】:get_browser slowing down page load, any alternative?get_browser 减慢页面加载速度,还有其他选择吗?
【发布时间】:2012-08-17 13:16:17
【问题描述】:

我已经使用 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 会更好(我不想因为我需要服务器端的值)?

【问题讨论】:

  • 我会轻松地使用粗体文本。添加过多的问题会使您难以阅读。
  • 如何更新browsecap.ini?
  • @Blender 注意到,对此感到抱歉:-)
  • @Dr.Molle 每天早上运行的基本计划任务。它从 Gary Keiths 网站下载 browscap 文件,然后覆盖我服务器上的当前文件
  • 您确定您使用的是来自tempdownloads.browserscap.com 的“PHP”版本吗?我的页面加载需要 1.5 多秒,但是当我用 Lite/PHP 替换我的 browscap.ini 时,它下降到只有几百毫秒。我认为 ASP 中的语法在 PHP 中使用时会导致性能问题。

标签: php javascript user-agent browser-detection browscap


【解决方案1】:

这个类会派上用场:http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/。我在我的许多项目中都使用它,它不使用 get_browser,而是查看浏览器的用户代理。我已经用Windows Phone浏览器更新了我的版本,你可以在:http://cl.ly/code/1V3E1k1G3B25下载。

【讨论】:

  • 这不是最新的,不再存在。下载链接坏了:-(
  • 我已更新我的答案以包含我的版本,以便您下载。
  • 这是一门很好的课程,感谢您的帮助,但由于没有维护,因此我无法使用它。我不得不暂时求助于使用解决方法。将在一分钟内发布。 +1 为您提供帮助
【解决方案2】:

到目前为止,我还没有找到一个合适的替代 get_browser 函数的方法,我也无法找到为什么它在我的 Windows 服务器上而不是在我的 Linux 上很慢。

目前我将应用一个基本的 cookie 解决方法。在第一次访问我的网站时,我会将浏览器详细信息存储在 cookie 中,然后从那时起检索这些信息。这比暂时使用get_browser 函数要快。

如果其他人有任何其他解决方案,请发表评论或发布

【讨论】:

  • 你能接受另一个答案吗,因为有一些更好的选择。
【解决方案3】:

目前 PHP 的完整 browscap.ini 大小约为 10MB。对 get_browser() 的单个调用或访问该“数据库”的其他方法需要大量资源。

这就是我更改格式并将数据导入 MySQL 数据库的原因。我编写了两个简单的脚本,当新的 browscap.ini 出现时,我可以轻松地更新数据库。第一个脚本从 browscap.ini 文件生成表结构 - 第二个脚本为表提供种子。 如果您对脚本感兴趣,请在下面的 cmets 中告诉我,我会为您上传。 它们全是意大利面,但它们很管用。

由于浏览器不会在会话期间发生变化,因此您应该在每个会话中仅从 browscap.ini 获取数据一次,然后将其存储。

【讨论】:

  • 我很想看看你的脚本。你还有吗?
  • 好的,今晚我会上传给你
  • 谢谢。我查看了解析 browscap.ini,但它一团糟,甚至使用 csv 版本 - fgetcsv 惨遭失败。
  • 您可以在这里找到它们:black-snow.net/tmp 请记住,它们从未被用于“外部世界”。为了获得良好的结果,您可能还必须查询数据库中的“父”元素并将这些内容合并在一起。另外请记住,我已经在 2k14 中编写了这些 - 我不知道它们是否适用于当前的 browscaps。
  • 废话。我刚回到他们身边,他们已经不在了。我们可以再试一次吗?谢谢!也许把它们扔到 pastebin 或其他地方?
【解决方案4】:

我在使用get_browser 时也遇到了大约 5 秒的延迟,所以我也寻找了另一种解决方案。

piwik 中的一个库非常有效,并且肯定会在很长一段时间内保持最新状态:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多