我对使用用户代理检测来确定要发送哪个JavaScript资源版本到客户端的优缺点很感兴趣。
特别是,如果某些Web浏览器本地支持某项功能,而其他浏览器则需要冗长的JavaScript解决方案,那么是将解决方案提供给所有人并在需要时只在客户端运行它好呢,还是只向需要它的浏览器提供解决方案,并向其余浏览器发送对本地功能进行封装的简单代码更好呢?
第二种方法可能会出现哪些问题,它们是否会超过为支持的浏览器减小响应体积的好处?
我对使用用户代理检测来确定要发送哪个JavaScript资源版本到客户端的优缺点很感兴趣。
特别是,如果某些Web浏览器本地支持某项功能,而其他浏览器则需要冗长的JavaScript解决方案,那么是将解决方案提供给所有人并在需要时只在客户端运行它好呢,还是只向需要它的浏览器提供解决方案,并向其余浏览器发送对本地功能进行封装的简单代码更好呢?
第二种方法可能会出现哪些问题,它们是否会超过为支持的浏览器减小响应体积的好处?
RequireJS
(或类似工具)来按需加载“可选”内容。
这种方法假设您不介意额外的HTTP请求……过多的测试、加载和重复过程可能比包含一个大文件更加拖慢速度,所以情况因案而异,但是肯定存在合理的折中方案。1)在页面加载时,使用小型测试(例如Modernizr)检测功能。
2)如果测试成功,则使用本地资源;如果失败,则使用RequireJS加载其他资源。
3)获得收益。
从SEO的角度来看,这并不是利弊问题,但你应该考虑到Googlebot总是会看到“workaround”版本。(我假设这是默认版本,在没有识别出User-Agent时)
我之所以在这里说这个,是因为我看到有几个网站在实施基于用户代理/cookie的自定义JS规则时遭受了重创。
回到你最初的问题,我建议使用单一版本方法——因为它更易于管理,而且不需要你跟踪多个脚本版本。
@BLSully在这里提出了一个很好的观点(+1),即这将导致额外的HTTP请求。你的整个网站速度可能会下降,或者任何收益都将大大减少。
如果这确实是你的目标,那么有许多更好的加速方法可以选择...
另一种可能性(无需额外的http请求)是使用用户代理标头发送不同版本的内容。请查看设备地图文章或查看有关在实际应用中使用此技术的引用文章。
我认为优点如下:
缺点: