【问题标题】:Is it better/faster to detect mobile browser on server side (PHP) or client side (Javascript)?在服务器端(PHP)或客户端(Javascript)检测移动浏览器是否更好/更快?
【发布时间】:2012-10-26 20:02:01
【问题描述】:

我看到了检测某人是否在 Javascript 中使用移动浏览器的代码(例如 jQuery 脚本),并且我看到了一些在 PHP(或其他服务器端语言)中工作的代码。但我从未见过一个很好的解释来说明在所有或任何情况下一个是否比另一个更好。有什么理由说明一个更好的选择吗?

【问题讨论】:

  • 这取决于您对该检查结果的处理方式。如果您要重定向或包含完全不同的 css 或 js 文件,则服务器端会更好。如果您正在使内容面板环绕而不是浮动,那么也许 js 更好,或者可能是媒体查询。
  • 使用特征检测而不是 UA 嗅探。这样你实际上是在检测你将要使用的东西。

标签: php javascript jquery mobile jquery-mobile


【解决方案1】:

典型的答案:这取决于你为什么要检查......

从我的角度来看,这是我通常认为的:

  • 如果您想根据浏览器向用户呈现不同的体验(移动设备、平板电脑、笔记本电脑等),请在服务器上执行。

  • 如果您想呈现相同的一般体验,但需要考虑浏览器兼容性问题,请在客户端执行。

UX 领域的一些人也认为向用户显示一个空白页面并动态填充它是“糟糕的形式”。相反,应填充初始页面,并且可以动态添加或更改内容。如果您对此感到担忧,则可能需要结合使用服务器端和客户端。

【讨论】:

  • 我确实想要第一个,这是有道理的。
  • 您对好的 PHP 脚本有什么建议吗?我发现了这个:github.com/serbanghita/Mobile-Detect,但不知道是否有一个标准被接受为非常准确和可靠。
  • @DonRhummy 我过去一直使用browscap.ini,但作者最近宣布该项目停产。我还没来得及寻找替代品。
  • 请注意,browscap 会在您的应用程序中引入延迟,因为运行它并不是一件小事。这种延迟不仅仅是没有,使用 Windows Server 2008 R2 64 位服务器,没有其他任何东西运行 browscap 增加了明显的延迟。
【解决方案2】:

我会说更好的方法是在服务器端,因为对于 Javascript,您需要等到页面被渲染,而在服务器端它发生在之前。

【讨论】:

    【解决方案3】:

    如果您尝试检测这一点以确定哪些 JavaScript 功能可用,您将获得更高的准确性,并且如果您在 JavaScript 中执行此操作,则不会对速度造成任何重大损失。

    如果您要完全更改呈现的页面类型,例如完整网站或移动网站,则最好在服务器端进行。

    【讨论】:

    • 第二个是我要找的,所以说得通。
    • 我会避免自己做这个检测,当你试图支持来自不同制造商的大量设备时,它会变得非常复杂,非常快。 mobile.sniffer 是 python 中的一个项目
    • 您对好的 PHP 脚本有什么建议吗?我发现了这个:github.com/serbanghita/Mobile-Detect,但不知道是否有一个标准被接受为非常准确和可靠。
    【解决方案4】:

    正如 Ricebowl 所说,永远不要相信客户。但是,我觉得如果您确实信任客户,这几乎总是一个问题。如果您的应用程序值得编写,则值得妥善保护。如果有人可以通过编写自己的客户端并传递您不期望的数据来破坏它,那是一件坏事。因此,您需要在服务器上进行验证。

    【讨论】:

    • 即使在服务器上进行验证也不会停止您的建议。任何人都可以欺骗客户端,而服务器永远无法分辨。
    • 您始终可以使用逻辑来防止服务器验证。取决于您的编码方式。
    【解决方案5】:

    绿色比红色好吗?

    任何事物都有其优点和缺点。例如,在服务器端做更可靠,在客户端做意味着更少的服务器工作。

    事实上,客户端可能禁用了 JavaScript(请参阅 Firefox 的 NoScript 扩展和 Chrome 的 ScriptNo,它允许智能用户仅在您真正需要的站点上启用 JS 它 - 一个很好的副作用是它现在还消除了几乎所有的广告,因为它们现在似乎很大程度上依赖于来自第三方域的 JS)。所以只使用 User-Agent 字符串更可靠,但不太灵活

    如果你的工作是 JS-heavy,你可能会使用一个 愚蠢的服务器,即你不需要慢速的 PHP,但是你可以通过高性能静态服务来提供你所有的数据,通过各种 CDN 等 - 但任何需要 JS 的东西都较少适用于搜索蜘蛛,有些用户可能会阻止它。

    【讨论】:

    • 是的。我看到它提到客户端的一个可能问题是浏览器可能缺少甚至使检测工作的功能(例如脚本关闭)。不确定这是否有效。
    • 客户端检测更可靠。您在服务器端唯一的检测是很容易伪造的 UA-String。更重要的一点是检测对您网站的呈现有多大影响。
    • @Christoph 我将根据是移动还是桌面呈现完全不同的网站,这就是我在这里寻找的检测。我还将检测 IE 与 Chrome 等,但这将在客户端处理。
    • 那么当然你必须使用服务器端检测,因为客户端在这里不可行,因为你必须加载所有版本或进行一些 ajax 调用来获取正确的内容,这会导致页面变慢正在加载。
    【解决方案6】:

    作为一名 Web 开发人员、UX 和 UI 程序员,我认为如果有人想要更改他们的 UA,那很好。他们要处理不兼容的问题。至于移动设备与桌面设备,我建议使用轻量版的 browscap.ini,而不是搜索设备检查来查找 ismobiledevice。 if 语句将是真或假,那么您也可以检查平板电脑。在 if mobile 子句中检查关联数组中的 istablet 键。您可以将它用于手机或平板电脑的 CSS。

    【讨论】:

    • 欢迎来到 StackOverflow,内森!请注意,提问者想知道在客户端或服务器端进行一般检查是否更可取。您的回答虽然内容丰富,但实际上并没有解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2018-01-19
    相关资源
    最近更新 更多