【问题标题】:Scala.js code produced by 1.0.1 slower than 0.6.321.0.1 生成的 Scala.js 代码比 0.6.32 慢
【发布时间】:2020-04-04 03:18:20
【问题描述】:

我一直在使用 Scala.js 编写一个小项目:

https://github.com/ppgllrd/Algorithms.scalaJS.InfectiousDiseaseSimulator

我注意到 1.0.1 编译器生成的 Javascript 比 0.6.32 生成的要慢得多。它们都可以在以下位置访问:

https://ppgllrd.github.io/Algorithms.scalaJS.InfectiousDiseaseSimulator/0.6.32/

https://ppgllrd.github.io/Algorithms.scalaJS.InfectiousDiseaseSimulator/1.0.1/

我的动画在 1.0.1 中运行速度较慢。当我使用 Firefox 并将人口规模参数设置为更高的设置 (1500) 时,这一点特别明显。甚至可以注意到,对于 1.0.1,算法的初始化(因为您按 Start 直到看到第一帧动画)需要更长的时间。

我以完全相同的方式编译了两个版本(使用 Scala 2.13.1),唯一的区别是在我的plugins.sbt 中使用了addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.32")addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.0.1")

这种行为是意料之中的吗?由于 1.0.1 声称提供更好的运行时性能,我在代码中做的任何特别的事情可能会导致这种性能损失吗?

【问题讨论】:

  • 如果在 Firefox 上特别明显,可能是 1.x 中默认使用 ES 2015。您可以尝试在项目的settings 中添加scalaJSLinkerConfig ~= { _.withESFeatures(_.withUseECMAScript2015(false)) },然后添加clean 并重新编译,以隔离该因素。
  • 感谢您的及时答复。这似乎是问题所在。我已经在ppgllrd.github.io/Algorithms.scalaJS.InfectiousDiseaseSimulator/… 上传了这些设置的结果 Javascript,它运行得更好。
  • 我把我的评论变成了答案。

标签: scala.js


【解决方案1】:

如果在 Firefox 上特别明显,可能是 1.x 中默认使用 ES 2015。尽管使用 ES 2015 可以大幅减少代码大小并改善调试体验,但 Firefox 对 ES 2015 的性能并不理想。

您可以使用以下 sbt 设置强制 Scala.js 1.x 发出 ES 5.1(如 Scala.js 0.6.x):

scalaJSLinkerConfig ~= { _.withESFeatures(_.withUseECMAScript2015(false)) }

添加到您项目的settings。在重新测试之前确保reloadclean

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多