Scala. js код, созданный на 1.0.1 медленнее, чем 0.6.32 - PullRequest
1 голос
/ 02 апреля 2020

Я кодировал небольшой проект, используя Scala. js:

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

Я заметил, что Javascript, созданный Компилятор 1.0.1 оказывается намного медленнее, чем компилятор 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 0,1. Это особенно заметно, когда я использую Firefox и устанавливаю для параметра размера популяции более высокое значение (1500). Можно даже заметить, что инициализация алгоритма (поскольку вы нажимаете кнопку Старт, пока не видите первый кадр анимации), занимает намного больше времени для 1.0.1.

Я скомпилировал обе версии абсолютно одинаково (используя * 1032) * 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, обеспечивающей лучшую производительность во время выполнения, что-то конкретно я делаю в своем коде, который может быть ответственен за эту потерю производительности?

1 Ответ

1 голос
/ 03 апреля 2020

Если это особенно заметно на Firefox, это может быть использование ES 2015 по умолчанию в 1.x. Firefox 'производительность для ES 2015 ниже оптимальной, хотя использование ES 2015 позволяет значительно сократить размер кода и улучшить возможности отладки.

Вы можете заставить Scala. js 1.x излучать ES 5.1 (например, Scala. js 0.6.x) со следующей настройкой sbt:

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

для добавления в settings вашего проекта. Обязательно наберите reload и clean перед повторным тестированием.

...