1

我最近遇到了使用旧设备的用户,他们的浏览器(主要是 Safari 9)引发 JS 错误,因为他们没有实现const我们在现代 SPA 应用程序中使用的关键字*。

我想一个解决方法是让 Babel 使用常规var关键字重新编译整个应用程序,但我担心这样做会降低网站的速度。您对此有什么想法/经验吗?

如果我们决定支持此类浏览器,有没有办法为这些浏览器编译网站版本?我听说可以对 javascript 文件使用媒体查询。方便吗?

*我们在https://www.myjobglasses.com托管一个 ReactJS 应用程序,它来自一个弹出的 create_react_app

4

2 回答 2

1

在上传之前使用 Babel 转译网站代码。根据我的经验,即使针对较旧的浏览器,它也不应该显着降低您的应用程序的速度。

Babel 有一个很棒的工具可以为特定的浏览器转换代码,叫做babel-preset-env

https://babeljs.io/docs/en/babel-preset-env

因为它使用这个:https://github.com/browserslist/browserslist进行检查,您可以定义您的转译将遵循的不同规则,因此 - 您将始终拥有工作代码,例如(取自preset-env文档):

{
  "targets": "> 0.25%, not dead"
}

{
  "targets": {
    "chrome": "58",
    "safari": "9"
  }
}

另一个想法 - 如果您想深入研究,您实际上可以准备两个捆绑包并根据浏览器版本有条件地加载它们(因此,基本上,对于 Safari 的这种特定情况)。

这将要求您在连接到服务器时(例如通过用户代理)以某种方式检测浏览器并提供不同的捆绑包,但这是可行的;)

于 2018-10-12T10:50:22.713 回答
0

使用像Modernizr这样的包怎么样?您可以检查客户端的浏览器是否支持某些在 Safari 中众所周知会失败的功能,并将其包含在您的 Modernizr 支持中。我认为这很简单。在这里查看Modernizr

此外,这个答案可能很有用:https ://stackoverflow.com/a/13480430/7868769

于 2018-10-12T10:53:37.547 回答