我很好奇在Web服务器中使用用户代理检测的优缺点,以确定要将哪个版本的JavaScript资源发送到客户端。
特别是,如果某些Web浏览器本身支持某项功能而其他Web浏览器需要详细的JavaScript解决方法,那么最好是将解决方法提供给所有人并仅在需要客户端时运行它,或者仅针对需要的浏览器提供解决方法它并向其他部分发送一个薄的包装本机功能?
第二种方法可能会出现什么问题,并且它们可能超过支持浏览器的较小响应的好处?
你可以使用RequireJS
(或类似的)按需加载“可选”的东西。
1)在页面加载...测试小测试的功能(Modernizr)
2)如果测试成功,则使用native,如果失败,则使用RequireJS加载其他资源
3)利润。
这确实假设你不介意额外的http请求....太多这些测试,加载,重复进程可以减慢速度,而不仅仅包括一个大(r)文件,所以它依赖于案例,但肯定是合理的中间地带......
通常,将javascript的一个副本发送给所有客户端并让javascript本身进行功能检测以决定如何最好地处理每个浏览器是一个更好的解决方案。这具有以下优点:
这在Pro或Con中都没有,但从SEO的角度来看,你应该考虑到Googlebot将始终看到“变通方法”版本。 (当我没有识别出User-Agent时,我假设它是默认值)
我在这说,因为我在实现基于用户代理/ cookie的自定义JS规则时看到了几个站点。
回到你原来的问题,我建议使用单一版本的方法 - 只是因为它更易于管理,并且不需要你跟踪脚本的几个版本。
@BLSully还提出了一个关于这将导致的额外HTTP请求的优秀点(+1)。有可能您的整体网站速度将直线下降或任何收益将大大减少。
你可以为加速做更好的事情 - 如果这确实是你的目标......
另一种可能性(没有额外的http请求)是使用用户代理标头来发送不同版本的内容。看看关于这个主题的device atlas article,或者看看有关usage of this technique in wild的参考文章。
我认为是优点:
缺点: