-
-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Scala.js 1.11 (news) now removes unused fields.
If I understand correctly, this means that we can have e.g. val div = htmlTag("div")
instead of it being a lazy val, and if you never use div-s in your app, div won't be included in the JS bundle, similar to how it works today with lazy vals.
This would be great for us because having a hundred lazy vals for all the tags and properties that you use obviously comes with some overhead, and even if it's not really noticeable, it would be great to simplify.
However, we need to test whether the Scala.js optimizer is smart enough to recognize our implementations of def htmlTag
as "pure", and thus removable, otherwise we won't win anything. For Laminar the implementation instantiates a class HtmlTag
which inherits from a trait with two public val-s, the constructor doesn't do anything else other than set those vals. For Outwatch and other consuming libraries, I'm not sure, but I suspect it's something similar. I'm hoping all our implementations are pure enough.