我一直在使用Scala.js编码一个小项目:
https://github.com/ppgllrd/Algorithms.scalaJS.InfectiousDiseaseSimulator
我注意到,由1.0.1编译器生成的Javascript比由0.6.32生成的Java Java慢得多。都可以在以下位置访问它们:
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)时,这特别值得注意。甚至可以注意到,算法的初始化(自从按Start直到看到动画的第一帧为止)花费了1.0.1更长的时间。
我用完全相同的方式(使用Scala 2.13.1)编译了两个版本,唯一的区别是在我的addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.32")
中使用了addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.0.1")
或plugins.sbt
。
此行为是否值得期待?由于1.0.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
中。重新测试之前,请确保先reload
和clean
。