I am working on an app where there is a lot of motion and positions that are updated dynamically based on the state.
I threw together a very crude demo here:
https://svelte.technology/repl?version=1.13.2&gist=ac946b7b6802e16d0e963d3043c5d1d2
Anyway, I noticed thate the generated code uses element.style.cssText. I didn’t really think much of it, but I thought I would throw together a jsperf test to compare it to setting the styles attributes directly. (I found a few existing jsperf tests, but they were just setting the same property/value over and over, so I didn’t really trust the results)
https://jsperf.com/csstext-vs-style-moving-element
It looks like cssText is approximately 15-30% slower in Chrome (in Safari it is around 50% slower).
Also I threw a test in there using cssText with unchanged styles and that makes the performance quite a bit worse. I am not 100% sure about what svelte is doing, but I believe it is rendering out the full style attribute string every time it re-renders an element.
I think it would be nice to update svelte so that it sets style properties directly. Not only would that be a bit faster, but it would allow the generated code to only update the styles that have changed vs. resetting the entire style attribute string each time.
I am sure that is quite a bit of work, but perhaps this could be considered a performance optimization for the future!
I am working on an app where there is a lot of motion and positions that are updated dynamically based on the state.
I threw together a very crude demo here:
https://svelte.technology/repl?version=1.13.2&gist=ac946b7b6802e16d0e963d3043c5d1d2
Anyway, I noticed thate the generated code uses
element.style.cssText. I didn’t really think much of it, but I thought I would throw together a jsperf test to compare it to setting the styles attributes directly. (I found a few existing jsperf tests, but they were just setting the same property/value over and over, so I didn’t really trust the results)https://jsperf.com/csstext-vs-style-moving-element
It looks like
cssTextis approximately 15-30% slower in Chrome (in Safari it is around 50% slower).Also I threw a test in there using
cssTextwith unchanged styles and that makes the performance quite a bit worse. I am not 100% sure about what svelte is doing, but I believe it is rendering out the full style attribute string every time it re-renders an element.I think it would be nice to update svelte so that it sets style properties directly. Not only would that be a bit faster, but it would allow the generated code to only update the styles that have changed vs. resetting the entire style attribute string each time.
I am sure that is quite a bit of work, but perhaps this could be considered a performance optimization for the future!