top | item 44307298

Benchmark: snapDOM vs html2canvas

47 points| jmm77 | 9 months ago |zumerlab.github.io | reply

16 comments

order
[+] allan_s|9 months ago|reply
For the 1st example, snapdom is not only faster, but actually correct, while html2canvas has some artifacts (on Linux/Firefox)
[+] jmm77|9 months ago|reply
Thank you for mentionig this. There are still some caveats I hope fix soon. And I working on a plugin system to allow user modify all aspects of the capture
[+] arecsu|9 months ago|reply
Second this. Congratulations for snapDOM by the way. It performs great!
[+] djxfade|9 months ago|reply
Very cool! How does this work from a technical standpoint? Do you have to implement a full HTML/CSS renderer in JS, or is there an official browser API to capture the elements as image data?
[+] jmm77|9 months ago|reply
I'm using several functions to clone the DOM and insert it into an SVG <foreignObject>. This approach is now well supported across modern browsers, although <foreignObject> is still a rather primitive way to handle HTML and styles within SVG, which can sometimes lead to results that aren't fully precise in certain cases. To reduce the size, I created internal CSS classes to avoid repeating CSS properties, and I'm also using several caches to prevent re-cloning styles that have already been processed. There's still a long journey ahead, but I hope a plugin system will allow for more fine-grained control over all capture stages
[+] XCSme|9 months ago|reply
Congrats!

If a render is 13ms (under 16ms), it means it could, in theory, also record page video capture at 60fps or 30fps?

[+] jmm77|9 months ago|reply
Yes, I'm afraid it depends a lot on what elements you are capturing. But maybe with a plugin designed to perform a capture burst and collect them in an array, it would be possible to generate an animation as output.
[+] kreetx|9 months ago|reply
SnapDOM can capture HTML elements as SVG - what are use cases for this?
[+] jmm77|9 months ago|reply
Yes, the default capture output is a svg dataurl. But there many other export options. This lib was made as an internal tool for another project called Zumly that is zoomable engine and the svg format was the faster output I found. But then I realized that could be an independent tool like html2canvas
[+] JimDabell|9 months ago|reply
It seems like it would be a lot more efficient to use SVG for screenshot testing design system components rather than raster images.