基于User-Agent提供JavaScript

时间:2012-10-24 17:38:04

标签: javascript webserver user-agent

我很好奇在Web服务器中使用用户代理检测的优缺点,以确定要将哪个版本的JavaScript资源发送给客户端。

特别是,如果某些Web浏览器本身支持某项功能而其他Web浏览器需要详细的JavaScript解决方法,那么最好是将解决方法提供给所有人并仅在客户端需要时运行它,或者仅将解决方法提供给客户端需要它的浏览器并向其余部分发送一个围绕本机功能的薄包装?

第二种方法可能会出现什么问题,并且它们可能会超过支持浏览器的较小响应的好处?

4 个答案:

答案 0 :(得分:3)

您可以使用RequireJS(或类似)按需加载“可选”内容。

  

1)在页面加载...测试具有小测试的功能(Modernizr)

     

2)如果测试成功,使用native,如果失败,则使用RequireJS加载其他资源

     

3)利润。

这确实假设您不介意额外的http请求....太多的这些测试,加载,重复进程可能会减慢速度,而不仅仅包括一个大型(r)文件,因此它依赖于案例,但是绝对是合理的中间地带......

答案 1 :(得分:2)

通常,将javascript的一个副本发送给所有客户端并让javascript本身进行功能检测以确定如何最好地处理每个浏览器是一个更好的解决方案。这具有以下优点:

  1. 功能检测比浏览器检测更加准确和向前兼容,即使您以前从未见过的浏览器也是如此。
  2. 您可以获得所有浏览器的一个javascript副本,这些副本通常更容易测试和执行,并且不需要服务器端分发逻辑。
  3. 开发一套适应客户条件的通用javascript通常比开发N个独立版本的网站javascript容易得多。

答案 2 :(得分:1)

这在Pro或Con中都没有,但从SEO的角度来看,你应该考虑到Googlebot将始终看到“变通方法”版本。 (当我没有识别出User-Agent时,我假设它是默认值)

我之所以这么说,是因为我在实现基于用户代理/ cookie的自定义JS规则时看到了几个网站。

回到原来的问题,我建议使用单一版本的方法 - 只是因为它更易于管理,并且不需要你跟踪脚本的几个版本。

@BLSully还提出了一个关于这将导致的额外HTTP请求的优秀点(+1)。可能是您的整体网站速度将直线下降或任何收益将大大减少。

你可以为加速做更好的事情 - 如果这确实是你的目标......

答案 3 :(得分:0)

另一种可能性(没有额外的http请求)是使用用户代理标头发送不同版本的内容。看看有关此主题的device atlas article或有关usage of this technique in wild的引用文章。

我认为是优点:

  • 喜欢发送给客户端的内容数量(特别是对于移动设备而言)
  • 浏览器将使用情人资源而不使用不需要的代码

缺点:

  • 需要维护各种JavaScript版本
  • 用户代理解析正在移动目标