-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Description
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!