【问题标题】:Which version of JavaScript should I compile to? [closed]我应该编译到哪个版本的 JavaScript? [关闭]
【发布时间】:2019-02-01 18:11:28
【问题描述】:

假设我正在编写一个 NodeJS 项目,其语言可以编译为 JavaScript,例如 TypeScript。使用 TypeScript(或其他使用 Babel 的东西)我可以选择将我的代码编译为任何版本的 JavaScript,无论是 ES3ES5ES6ES2017 等。

显然,如果我在客户端编写一些东西,我会坚持使用早期版本,例如 ES5,以保持对用户的兼容性。但是,由于我正在专门为最新版本的 NodeJS 编写服务器端的东西,所以我可以使用这些选项中的任何一个。我想知道的是,我应该使用哪个版本来帮助提供最佳性能?

NodeJS 的解释器 V8 根据源代码的编写方式提供不同的优化,所以我想选择其中一个可能会带来不同的好处。一方面,您会认为选择旧版本的 JS 会更好,因为它存在的时间更长并且有更多时间进行优化。另一方面,编译到更高版本的 JS 会产生明显更简洁的代码,并且依赖于更新的可用功能,这也可能会有所帮助。

任何想法/反馈将不胜感激!

【问题讨论】:

  • 哪个nodejs? LTS 还是电流? - 编译成你使用的任何 nodejs(真的很简单)
  • 当一个特性必须转换为旧版本的 JavaScript 时,它的行为往往会以微妙的方式有所不同。尽可能使用最新版本以避免奇怪。
  • “我应该使用哪个版本来帮助提供最佳性能?” — 当您对 您的 代码进行基准测试时,它会提供最佳性能。
  • 我真的怀疑转译到旧版本会带来更好的性能。 (除了那些 babel 无法复制正确语义并选择更简单的东西的情况 - 但你真的想要新语义)

标签: javascript node.js typescript v8 transpiler


【解决方案1】:

我确实认为这个问题主要是基于意见的,但是.. 我不认为一个有效的问题应该被忽略,只是因为有一部分可能被认为是主观的。因此,虽然您应该对此持保留态度(因为最终,这是您的应用程序和您选择使用的版本),但我确实希望这能将您推向正确的方向:


我个人认为,您应该编译到最新的 ES 版本。为什么?
首先,让我们回顾一下事实:

  • 兼容性不是什么大问题。许多旧功能can be polyfilled 以实现兼容性。
  • 正如@Ry- 有效地指出的那样,当一个特性被转换为旧的 JS 版本时,它的行为可能会有所不同,通常情况下你甚至可能没有注意到或预料到。
  • 每个 ES 版本都有一些 QoL 更改、错误修复和代码改进
  • 提供新的有用功能

现在,这更多是个人意见,但我坚持:

  • 我认为,作为开发人员,我们不应该回顾过去并使用过时的或完全无法使用的技术,然后猛烈抨击 墙。与其抱怨别人不想适应,不如成为 运动的一部分并使其他人适应。我不是说你的网站 对于旧浏览器不应该是“万无一失的”,恰恰相反,只是 不要降低到他们的水平并因此而限制自己。走 顺其自然!

总而言之,除非您有非常特殊的原因,不应该使用最新版本,否则始终使用最新版本(LTS,而不是最新测试版)。

【讨论】:

  • 我相信只使用最新的。这就是为什么存在像 Babel 这样的工具的原因,所以你可以在最新版本中编写,并且仍然确保你编写的内容对于大多数浏览器(如果不是所有浏览器)都可用。不是每个人都能使用最新的浏览器版本,也不是每个浏览器的最新版本都能够处理 ES2020 功能(cough Internet Explorer cough)。兼容性是个大问题。例如,如果出于某种奇怪和奇怪的原因,您更喜欢 IE,并且您尝试使用依赖于 BigInt 变量的应用程序,那么祝它能够编译到 ES2020 工作顺利。
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多