I'm working on a webapp (will only be running in Chrome 19+) that is currently built with CSS3 transitions. More specifically, I'm using Jquery Transit to fire the CSS3 animations with Jquery itself. The reasoning here was that some of the animations are drawn out for several seconds and jquery animate wasn't smooth enough, but Transit is a great fix for this. Jquery Transit is working quite well but I'm curious to whether HTML5 Canvas will render things even smoother? And if so, is it worth pursuing, given the fact that I'm using AJAX and percentage-based locations for DIVs currently? If anyone here knows how CSS3 Animations compare to HTML5 Canvas performance in Chrome and would be willing to give their input I would greatly appreciate it!
-
3This should help you decide. stackoverflow.com/questions/4842872/…Anirudh Ramanathan– Anirudh Ramanathan2012-06-25 01:14:58 +00:00Commented Jun 25, 2012 at 1:14
-
1Also, HTML5 canvas performance will be better on IE9+. Hardware acceleration integration into new versions of IE is impressive.Anirudh Ramanathan– Anirudh Ramanathan2012-06-25 01:17:30 +00:00Commented Jun 25, 2012 at 1:17
-
@DarkXphenomenon: Very interesting test! Being that my application will only be shown on Chrome 19+, it seems like CSS3 animations perform just as well (if not better) than Canvas, at least as of version 8?Zakman411– Zakman4112012-06-25 01:28:57 +00:00Commented Jun 25, 2012 at 1:28
-
1yeah. you should probably go with CSS3.Anirudh Ramanathan– Anirudh Ramanathan2012-06-25 01:30:05 +00:00Commented Jun 25, 2012 at 1:30
-
3Besides performance, you might also consider if canvas would be appropriate for the situation. What is easily done with CSS and HTML might become overly complex with canvas. Of course, if you wanted fiery explosions or something else where canvas would be better suited, a hybrid would be best (ie. just using canvas for the effect and keeping everything else in CSS)Stecman– Stecman2012-06-25 01:30:27 +00:00Commented Jun 25, 2012 at 1:30
2 Answers
CSS3 will give you fewer headaches and you can change it easily in the future, and it will work gracefully on systems that aren't canvas-enabled.
If you're using text, you should absolutely stick with CSS if you can get away with it. Canvas ruins the accessibility of your app and disallows users from using a carat or highlighting text or using text to speech.
If you're just making a funny sliding button or something then you should also just use CSS as it will probably be much easier to implement and maintain. Redoing CSS is easier than slogging over (what can be complex) JavaScript.
I can't honestly tell you if canvas renderings will be smoother. One plus of the canvas is that you can animate things to a seemingly larger size (while keeping the canvas the same size) without having to cause the DOM to re-layout. On most modern systems this really isn't an issue thought.
Furthermore, if its already done with CSS3, are you actually having performance problems? If nobody has complained about performance yet, why bother rewriting it for canvas? If you aren't encountering any real performance problems so far, why reinvent your app?
3 Comments
The problem I think you might run into with canvas is that it is bitmap based. Therefore scaling up and down after the page is initially rendered will be a problem. Furthermore, line breaks will be painful to deal with potentially. The people who write your site's content might find it challenging to insert line breaks because there is no such thing as a line break using canvas, svg, or vml. In fact you need to pre-compute line breaks. "\n" using raphael.js works, but it isn't great. Furthermore you can't use selectors to target various portions if you in your svg graphics. You may be able to using canvas, maybe.... Canvas probably has a buncha of the same gotchas.
On the image front you will have blurry images if it scales and there are less libraries out there that deal with image resizing for canvas. This may change in the future, but it will still be an ordeal to deal with. I'd just stick with your divs/css3 with jquery fallbacks for older browsers.
From a purely performance perspective, checkout the first comment on your question. It has some nice benchmarks.