11 ms·
Don't animate height
- andrewstuart 1y agoI seem to recall reading that Chrome has height transition optimizations coming.
- jtangelder 1y agoWondering what the performance of a simple animated gif would be, instead of the composite layer transformations.
- nightpool 1y agoGIFs historically were pretty unoptimized from a display perspective (as anyone with a moderately-active Tumblr dashboard could tell you), so I wouldn't be surprised if it was worse.
- xp84 1y agoI disagree. The height of a DOM element is much more expensive to recompute as this article shows than a single element which gets frames swapped out with static images. The latter can be guaranteed to never impact any other part of the document. The end result of either is that the pixels in the animated area need to be recomputed, and end result which will be the same for both, but a GIF will have no further impact on anything else whereas resizing DOM elements has side effects that have to be constantly updated and checked for which scale with the number of sprites you're animating (unlike the GIF bitmap which is gonna be 'flat rate'). Likewise, for a tiny animation, having the frames of the GIF in memory and blitting them onto the screen in sequence sounds like orders of magnitude less CPU/GPU than performing all the ridiculous math-based transforms over and over again. The Tumblr example is not instructive here because those were frequently many many frames, very colorful (often photos), and/or large in dimensions, taking up a ton of memory which was probably the main problem causing our browsers to choke. This would be none of those things.
- evan_ 1y agoOr if you need to actually control it, an SVG or <canvas> based animation
- dylan604 1y agoIf the bars are not related to actual data and are purely just pre-canned animation, the gif would just come with additional file size for a one time cached type of download. If the bars do need to be animated to real-time data coming in, then the gif would not be the right fit for that need.
- threetonesun 1y agoCan't imagine anyone is deriving much information value from a visualizer with 3 bars. Apple Music has a similar animation and it will start bouncing when you click play, while the music is clearly downloading and there's no sound.
- dylan604 1y agoJust because it isn't useful to the user doesn't mean some dev hasn't spent the cycles doing it. I know I've personally had to write code that was an absolute waste, but some PM wanted and it was coded. Usually so it can be a bullet point in a demo that impresses low skilled PMs or sales drone, but techy user types just roll their eyes when it's pointed out to them.
- hbn 1y agoI think a mic visualizer is very useful to the user. You can tell if you're quiet, clipping, or your mic straight up isn't working at all.
- dylan604 1y agoYou've moved the goal posts. Nobody said an input levels indicator isn't useful. We're talking about this specific graphic not being a useful graphic for visualizing live data. You've wandered away from the pack here
- will-bradshaw 1y agoThis was true pre iOS 18. The bars respond to the music now (at least on iOS)!
- norskeld 1y agoPersonally, I'd be annoyed by both the resource-consuming animations and the blurry GIFs/canvas. Infisical does use the latter (canvas) for icons in their UI, and I somewhat hate it. I'd rather look at crisp, but static icons.
- jasonjmcghee 1y agoCanvas should never be blurry. If it is, something is doing a bilinear upscale. I'd guess someone forgot to take the scale factor of your display into account. Or there are images being used in the canvas, which would defeat the purpose for the use case you described.
- zahlman 1y ago... Why does a "note-taking app" have an "audio volume visualizer"??? Edit: kinda funny how I asked what I thought was a reasonable question and expressed entirely understandable confusion; got an upvote almost right away; then got multiple downvotes after people answered the question — as if it somehow suddenly became obvious why I should have expected such a feature a priori.
- samgutentag 1y agoThe product makes notes from the transciptions, so this animation isnt wildly off base to have
- satvikpendem 1y agoTranscribed voice notes
- trafnar 1y agoTheir app listens to your calls and transcribes things. I think this visualizer helps indicate when it is actively listening.
- Levitating 1y agoSo why does it need to be animated, a color indication could've worked just as well. Or the stop button right next to it...
- h1fra 1y agodumb question: would putting the parent div in absolute positioning solve the compositing?
- Eric_WVGG 1y agoIt already was. The whole point of this is that any height change is part of an expensive phase of the rendering pipeline.
- HWR_14 1y agoWhat amazes me is that so much a M2 Mac's resources would be used to render a website even if it rendered everything from scratch. There is almost no graphic content compared to a video game produced decades ago, and they would easily render a frame in 1/2 the time on decades old hardware
- hombre_fatal 1y agoWell, raw graphical content is the easy part. A live layout tree that has to be repainted and composited yet intersect with arbitrary layers like an accessibility tree and what would naively be N:N style calculations is completely different architecture. Consider examples where people toy with the concept of replacing the DOM with a canvas but basic things like text selection don't even work anymore.
- deleted 1y ago[deleted]
- zuhsetaqi 1y agoKeep in mind that the percentage in Activity Monitor is 100 % per core, so a 10 core CPU can go up to 1000 % usage. So 60 % means 60 % of a single core not of the whole CPU.
- gjs278 1y ago[dead]
- pohuing 1y agoAnd it's sensitive to dynamic scaling as well, isn't it? So it's possibly not 60% of a core at max clock, but maybe of a core clocked to 800mhz or something. I fell for that shallow analysis myself once when I noticed just how apparently bad the gpu usage was for a big of animation in a web page, until I noticed my 30% load gpu still drew as much wattage as it did on idle.
- 1y ago
- JakeSc 1y agoGreat writeup. With LLMs doing an increasing amount of the coding now, it would be great for the browser or development environment to have built-in validations that enforce good performance. The coding agent (or human) would get direct, immediate feedback at development time that there's a performance threshold violation, at development time.
- paulirish 1y agoWe're working on this within Chrome DevTools, similar to an MCP server with the signals you're describing.
- alterom 1y agoSo, after all the optimization, they're using 6% of the CPU to display what amounts to a tiny animated GIF that 1990s PCs would have no problem with. But it's vector graphics!, you might say. Yeah, like Flash, which ran fine on Pentium II, with plenty CPU cycles to spare. Pardon me, and I don't say it lightly, but... WTF?!
- smallpipe 1y agoYeah author congratulating themselves at the end because their note app is only using hundreds of millions of cycles every seconds, to do essentially nothing...
- another_one_112 1y agoI do miss flash, but we shall not forget that the performance boost came from low level access to the system (which made it a security risk).
- Dylan16807 1y agoI strongly doubt its ability to render a fast rounded rectangle needed that.
- bob1029 1y agoI would also suggest looking into the following in this case: https://developer.mozilla.org/en-US/docs/Web/CSS/contain https://developer.mozilla.org/en-US/docs/Web/CSS/contain https://developer.mozilla.org/en-US/docs/Web/CSS/will-change https://developer.mozilla.org/en-US/docs/Web/CSS/will-change There are hints you can provide to the browser that may have an impact in scenarios where you are animating layout properties.
- bijection 1y agoI was just starting a comment on this but you beat me to it! I believe contain: strict; on the parent element would have been sufficient here.
- webstrand 1y agoI tested `contain: strict` on their color changing SVG and didn't see any difference. Profiler says it's still doing layout.
- spankalee 1y agoCSS contain has made so many performance "truths" obsolete, but so few developers realize it. I've seen massive efforts to do things like port text editors to WebGL where rasterizing text is a huge pain where putting `contain: content` on the individual elements in the DOM version would have delivered most of the perf improvements. Browser rendering engines are now sophisticated GPU-accelerated compositors. Absolute positioning with contain: strict removes basically all CSS layout from the perf equation, and you don't have to write your own compositor or line-layout! `* {contain: content}` and flex/grid gets you the good parts of HTML and very good performance.
- dylan604 1y ago"What is Granola spending those cycles on? It's an Electron app" Yup. Matches my experience with pretty much every Electron app. Great that the dev tracked it down, but every Electron app is a waste of...electrons
- bitpush 1y agoMight be worth getting off of that high horse. You are not being very smart by saying 'akctually electron bad'. You know what else was a waste of electrons? Your comment, and my reply.
- dylan604 1y agoYour reply was not necessary though. Every electron app uses more of my computer's resources than when I use the same service through the web browser.
- bitpush 1y agoDo you have that documented somewhere, or is it just your observation?
- dylan604 1y agoI no longer have the app, but Slack uses <500MB of memory and .2% CPU in a tab in my browser. Back when I had the Slack electron app it was way more than that in use of system resources. I don't know what else to tell you. I don't know what other documentation would be interesting other than my observations made on my own equipment
- xp84 1y agoYes! And the electron app 90% of the time can't work offline anyway (or often would be useless even if it tried). So it's just an extra 2 gigs of space wasted on my SSD for another copy of Chromium, instead of having the website be an "App" installed in Chrome or Edge and granted notification (etc) permission. In my opinion, most things shouldn't bother to make an "app," and certainly shouldn't try to push their apps on me, unless they want to make an actual native app for their target platforms.
- jasonjmcghee 1y agoSeems like a great use case for a tiny canvas instead.
- Eric_WVGG 1y agoMy head is sort of reeling from this. If height animations are that expensive today, imagine how expensive (and still commonplace) they were twenty years ago. I fortunately quit animating height quite a long time ago in favor of similar transform techniques, but… wow, still crazy to learn the magnitude of this common operation.
- moritzwarhier 1y agoIt's really simple. Don't animate layout, especially if your DOM is huge. If your element floats absolutely positioned outside the layout flow, animating height would not be a problem. And if the browser facilities for animating height/max-height, especially to/from auto, get better, it surely will become more common. Right now, I wouldn't call it common. It's a common requirement, but only until you start to consider layout. Fwiw, animating margin and padding is possible and has the capability to cause the same amount of jank as animating height.
- Eric_WVGG 1y agoYou can animate an absolute positioned div without it obviously altering what a normal person would call "the layout." That's not simple unless one is willing to dig very deeply into the how web browser rendering works. And really still not simple. Otherwise this article wouldn't have been written.
- hbn 1y agoThe heart of the issue isn't that animating height is expensive, it's the downstream effect of that animation repeatedly changing the page's layout and forcing redraws.
- cvoss 1y agoBut it wasn't expensive twenty years ago. Twenty years ago people actually knew how to efficiently use their limited computational resources.
- Eric_WVGG 1y ago
- Liftyee 1y agoThis helped explain why my PC uses so many resources "with just a few webpages open". I didn't realise that graphical updates that seem so simple could be so resource-intensive.
- dvt 1y agoIs it just me, or have a lot of modern startups lost the plot? Imagine doing all this work for an element of your app which has nothing to do with its feature set. No one cares (certainly no customer) about an audio visualizer bar animation. The post is also riddled with all kinds of misunderstandings, as well. For example, the authoritative language used to describe the differences between layout/painting/compositing is just simply untrue generally speaking (though it might be w.r.t. Electron/Chromium). The W3C does not care how you implement your rendering engine, and even bringing up the spec betrays a misunderstanding of how these things work. In typical fashion, we see yet another grandiose blog post about fixing a "perf issue" for your hipster new startup that is essentially notepad.exe. Who funds this shit?
- woodpanel 1y agoThis was my thinking, too. Why distract users with giving an auxiliary feature so much prominence? Why wasn’t a GIF enough? Or just an SVG that consists of 3 frames? Spending this much time on fixing this bug was worthwhile (at least it created a HN front page article) but the solution was not. 6% CPU usage is horrible.
- xp84 1y agoHere's the part that makes me confused/angry: this is a flat style icon with maybe 4 or 8 colors displayed on a static flat green background. I could have built this 25 years ago with a single GIF with about 6 frames, that was a couple of kilobytes and would be performant on the (relative) potato computers we had then. With CSS you can easily make that GIF a background image and position it correctly in the <button> or whatever. Do it at 2x and scale it for retina sharpness. But modern "web designers" feel the need to spend how long carefully crafting that CSS animation which adds dozens of lines of code to the codebase and burns a ton of CPU...why? Just because you can, I assume? The same reason the same people use embedded <svg> documents inside the HTML for simple icons like "edit pencil" or "close", wasting bandwidth instead of at least putting them into asset files that can be cached. Frontend web "advancements" of the last 10-15 years, at least the way they are used, are mostly cancer in my opinion. I will allow for the usefulness of display: flex, and that's about it.
- nawgz 1y agoYes you're right, most users LOVE barebones and classic websites, that's why HN is so popular and Reddit hardly has any users. For that matter, do we really need colors? Just ship it with browser default styles.
- verall 1y agoIs it possible to restrict this as a user? Like to force webpages to use under a certain amount of render/paint time/resources or else just break so that one dumb tab doesn't use up all my battery? Then I can opt-in to greater resources usage if it's a webpage I actually care about. I've seen the "This webpage is using alot of resources" popup before but I don't think it would happen in this case. Because honestly I think this is horrifying. I would rather it switch from grey to red "recording" dot than use even the 6% the author decided was "fixed". In 99% of cases I do not care at all about the "artistic vision" of the UI designer and in the other 1% of cases (say an in-browser game or some useful data-viz) I could choose to allow the tab to go crazy with my resources.
- mrob 1y agoYour browser should allow you to override all CSS on the web. Here's how I disable CSS animations in Firefox: https://news.ycombinator.com/item?id=33223080 https://news.ycombinator.com/item?id=33223080
- nothrabannosir 1y agoThis is a level too deep. I don’t want to dictate what a website can and can’t do to limit resource usage; I just want to limit resource usage. Sure, noodling with content blockers has its own advantages, but for this particular case they cut at the wrong abstraction matter.
- dleeftink 1y agoA bookmarklet that injects custom CSS and selects all/certain items and applies the `contain: content` and `content-visibility: auto;` rules could do to trick. Additionally, the pseudo `:empty { display: none; }` selector may get you additional mileage.
- crazygringo 1y agoSeriously. It seems pretty reasonable to allow a web page a total amount of processing that is something like 100% CPU or GPU for 5 seconds. (E.g. can be 25% for 20 seconds.) And beyond that it gets throttled to 3% CPU cumulative max for however long it's been open so far. And make that the default for popular browsers, so sites are forced to be efficient or else be super super janky and stuttering. And allow a permission for unrestricted processing that things like WebGPU demos or games can ask for.
- Varelion 1y agoIt seems beyond absurd to me, that this tiny animation should be costing as much as 6% of CPU. There has to be more optimal ways to do this.
- MITSardine 1y agoSo, the CRAY-2 built in 1985 was rated at 1.9 GFLOPS. The M2 the author uses seems to be benchmarked at around 6GFLOPs per core [1]. So this 6% of the author's CPU (assuming charitably this is a single core) corresponds to about 20% of the mid 80's peak supercomputer capacity. People were already using those computers for applications that go slightly beyond animating 5 x 3 green little bars up and down at the time... I understand dev time cost > CPU time cost (for the company that hires the developpers anyways) but aren't things getting a little out of hand? Even without comparing to an 80's supercomputer, what if someone with a 15 years old laptop tries to use their app? What will those 6% CPU on the dev's shiny M2 MBP become? [1] https://boinc.bakerlab.org/rosetta/cpu_list.php https://boinc.bakerlab.org/rosetta/cpu_list.php
- utopman 1y agoThis. I did not find other comments like this in this thread. 6% M2 cpu (even single core) is a huge computing budget for such a small feature. At this point I don't really understand why OP seems happy with this result (sorry). I think even a naive canvas implementation can really and quite easily cut most of this computing budget. Also, a pure css animated thing should use mostly gpu in a right DOM implementation. I think some issues remains in this result. Maybe OP displays it's app on a 240hz external screen which makes browser compute DOM animation at 240 fps requiring slighly more compute in a passive way (4o-mini suggests this, I am not sure browser works like this) I remember too much of my pentium 1 166Mhz let run entire age of empires 2 game in 1997
- efilife 1y agoI did find a comment like this. It's dead https://news.ycombinator.com/item?id=44653068 https://news.ycombinator.com/item?id=44653068
- khalic 1y agoYeah it really helps knowing CSS when doing frontend dev...
- exiguus 1y agoI'm not 100% convinced. Likely because the article doesn't show the difference between animations that are announced with 'will-change' and/or elements that are animated with position absolute. Also, it looks related to the browser and there was no evidence that this is also a issue in FF or Chrome.
- deepsun 1y agoJust wrap it in a container with fixed height and "overflow: hidden". Now the layout engine knows that it doesn't need to recalculate positions of elements outside that wrapper, and it's much faster. By the way, the same trick was speeding up large <table> rendering back in the day. As long as you know the size of your rows or columns ahead of time, which kinda defeats the purpose of <table>.
- deleted 1y ago[deleted]
- liuliu 1y agoThank you! This is what I am looking for in HN comments. Layout engine cannot be that stupid per the article. I guess it is not once you give it enough hint.
- codeptualize 1y agoThis is the answer. I thought this was fairly common knowledge, height is animated quite often (think dropdowns), no need for the over complications.
- alexchantavy 1y agoIs there a good way to learn techniques like this from first principles other than trying to become an employed frontend dev?
- brokencode 1y agoUsually you try to build something, realize it’s slow, then do a combination of searching for possible solutions, trying them, and profiling again and again to gain this knowledge. Experience is the best teacher.
- notatoad 1y agonot really. the web is 30+ years of fixes, shortcuts, compatibility hacks, tech industry politics, and other assorted mistakes. the "first principles" to understand it all is the complete set of mailing list archives of the WhatWG, plus the archives of the bug trackers of all the major browsers.
- tristor 1y agoMan, I hate what the web has become in 2025. There is absolutely no respect from frontend developers for their users. It's obscene the amount of wasted CPU cycles, energy, battery life, bandwidth, and time we have in aggregate due to horrible frontend development practices.
- DamonHD 1y agoNot just front-end! https://www.earth.org.uk/RSS-efficiency.html https://www.earth.org.uk/RSS-efficiency.html
- mpliax 1y ago> What is Granola spending those cycles on? It's an Electron app He could had stopped there.
- endemic 1y agoironic that the benefit of using web tech (platform abstractions) can be totally negated by such a small footgun, which then requires insane knowledge of the browser rendering pipeline to solve
- Sharlin 1y agoOne problem is that this is supposedly considered insane esoteric knowledge, when the concept of reflows, and why and when they're triggered, ought to be fairly basic knowledge to every reasonably experienced frontend coder. Up there with "O(n^2) may bite you in the ass". But we've decided that optimizing SEO or conversion rates or whatever is much more important than optimizing rendering.
- jbeninger 1y agoI think there's a bit of an "everybody knows that" [1] phenomenon when it comes to knowledge like this. Devs come from different backgrounds and work on different types of projects. There are 10000 things you expected to know to be an expert, and all of us are continually learning. [1] https://xkcd.com/1053/ https://xkcd.com/1053/
- Levitating 1y agoExcept that this is the developer of an apparently popular and well-invested product. If you expect to make a note taking app, which only has a piece of text, a stop button and a floating animation, I hope that you figure out why your performance is being tanked by your single animation.
- Etheryte 1y agoNone of this should be esoteric knowledge if you work with web technologies for a living. Animations, box shadows and blurs have a very long history of performance issues. Similarly, standard tools easily highlight the issue, as shown in the article.
- makeitdouble 1y ago> insane knowledge of the browser rendering pipeline to solve Saying it having not much of that knowledge myself: it's reasonable to sometimes need platform knowledge to make intricate things (here a realtime animation) behave efficiently. That's the same for game engines, native rendering, flash animations etc. There will always be edge cases, building enough stuff you'll hit them, and if you care about doing it right it will require knowledge to overcome the issues.
- awkward 1y agoThis looks like a clever implementation of a useful feature. I enjoyed that the developer was able to link the streaming audio API to a useful visualizer, recognize problems with his approach, debug issues in that visualizer, and find a clever solution using graphics fundamentals like masking. I'm less than impressed with the general consensus that he's somehow negligent for launching a feature that needed a fix, or that users don't want or need feedback about audio connectivity, or that the poster did something much better sometime back in `02.
- rectang 1y agoI read this article because just last week I set up CSS height transitions to show/hide divs in a form which displays conditional content (based on radio button selection). "Why shouldn't I do this?", I thought. It looks like the point of this article is that you should avoid continuous animation for CPU performance reasons. These performance reasons are probably inconsequential for occasional transitions. For many of us in the target demographic of "people who animate height", the scary title of this article is misleading.
- DamonHD 1y agoI created a little CSS-pulsing 'live' button and give it a fixed number of cycles of pulsing to cap worst-case resource consumption. But it took me a while to work out that that was the right thing to do!
- Quarrelsome 1y ago> Instead, we can create the illusion of a changing height by using two rectangles, applying translate to each. Its a very clever solution and props to the engineer, but this being the fix makes me truly despair at where we are as an industry around web UI. That html and css won despite these sorts of counter-intuitive horrors. UI layers that make me feel good reflect intent. I can take an image and write some code to darken that image (any image) and show that to the end user. It makes sense. However, in html+css I have to introduce a third element, another rectangle, slap it infront, paint it entirely black and set its opacity to something low. Sure, it works the same but it just feels so conceptually ugly.
- andoando 1y agoI had a similar problem trying to animate a book flipping pages. At the half way point I had to update the text to show the backside and update the back pages. However no matter what I did, I could not get the update to sync correctly with the page being exactly half way. There's probably a solution but I just gave up
- lelandfe 1y agoIt’s literally the sliding doors technique from, uh, two decades ago https://alistapart.com/article/slidingdoors/ https://alistapart.com/article/slidingdoors/
- ryandrake 1y agoIt's like building a space station with sticks and rocks.
- russellbeattie 1y agoI'm not sure how it's implemented on the JS side, but I can imagine the CSS getting a lot of updates per second as the voice level changes, constantly interrupting the current animation. Might be worth it to buffer the input until animationEnd() event fires. That might reduce the amount of calculations and redrawing that needs to be done. Or the CSS engine is robust enough to handle continual updates and this won't solve a thing. I'd have to test it.
- rayiner 1y agoWhy do browsers even allow this shit. I was trying out a scheduling app the other day, and it was using 3% of CPU just sitting there doing nothing. That’s a Pentium 1 level of computing power to do jack shit.
- pharrington 1y agoYou can animate height without forcing a relayout, as long as the element is out of the document flow.
- Saris 1y agoWhy are the bars on a little button animated in the first place? I don't get it.
- deathanatos 1y agoThis looks like a very typical audio recording UI element. The bars are animated to the volume of the recorded audio. Helps the user see that the application is picking up their mic. It's a digital analog of a VU meter on a mixing console, though the UI has morphed over time. (Like that the lines vertically centered, vs. being on aligned bottom like you might see on a real-world meter.)
- Saris 1y agoMan at that point why not make it bigger and put a proper dB scale on it, at least it would be useful then.
- deathanatos 1y ago… because it doesn't need to be bigger…? The purpose is to convey that "hey, the audio equipment is working". I use these all day to debug things like "am I not recording, or is the other side's volume muted?" We need "videoconferencing" or "notetaking" app levels of accuracy; it's not a sound studio app? Not to mention how much dB as a unit freaks people out.
- Levitating 1y agoExcept that it's not an actual meter, it's just a fake animation.
- deathanatos 1y ago… we don't know this, and I'm willing to extend the article the benefit of the doubt, because it isn't relevant to the core of the article.
- calypso 1y agoYou’re still okay with wasting 6% CPU and 1% gpu time on a simple note taking app?
- ASalazarMX 1y agoIn my wimpy work Virtual Desktop, this page eats 25-40% of my CPU just by scrolling up or down after fully loading. It's a severely limited VDI, I agree, but this performance is crazy for what is functionally a static page. It certainly doesn't give me confidence in using their app, given this landing page can become as heavy as GMail while doing nothing. How optimized is their electron app? Is the iOS version as heavy? Are they OK with wasting all this energy for nothing?
- forrestthewoods 1y ago> It's an Electron app The worst modern invention. HTML/CSS is so bloody awful at rendering user interfaces. We should if at least contained it, if not killed it outright. But instead it’s a contagion that has spread far and wide. How the hell does the optimized version use 6% of CPU? It should render at roughly 5000 frames per second. What a tragic state of affairs we live in.
- Ken_At_EM 1y agoThe final CPU/GPU usage is still totally unacceptable.
- irrational 1y agoWouldn’t the real fix be to use an animated gif?
- echoangle 1y agoI think the idea is to have the animation respond to the actual volume in realtime. The animation property is only so that the 10 updates per second get interpolated according to the framerate, I think. The real solution would be to remove the gimmicky animation and show a red circle.
- 65 1y agoThis article doesn't apply to every single use case and should not be taken purely at face value. A few week ago I needed to animate height for a banner like message that appeared in the layout (e.g. it was not absolutely positioned) once a user clicked a button. This banner message would cause a layout shift no matter what because its height was being added to the layout and shifting the elements underneath it down. Thus, to mitigate a jumpy layout, making the height animate made the layout shift easier on the eyes. And before you say "well design it differently" - I didn't design this.
- tomaskafka 1y agoHow about we create tools that don't consume 5+ % of user's CPU (and keep it busy, not allowing it to sleep, decreasing battery life significantly) when idling or doing some background work?
- Levitating 1y agoDoes a note taking app need such an animation if apparently it's that easy to accidentally drain the users battery? The UI of this app literally only has a piece of text, a button and this animated indicator. To render this it needs an entire chromium browser loaded into memory, and still it has performance issues. I will always prefer software written in native graphics toolkits. I understand the benefits of using electron but the only electron based software I've ever liked was vscode.
- throw14082020 1y agoI think there's a typo? > Less expensive are paint properties. A paint property does trigger layout, but it does repaint a layer, and then re-composites. It doesn't trigger a layout step?
- emmanueloga_ 1y agoNot just height, anything that causes continuous repaints can become expensive. Search for "jank free" to find more resources on the subject, or check this oldish website [1]. -- 1: http://jankfree.org/ http://jankfree.org/
- woah 1y ago> On my M2 MacBook, the renderer process is now using 6% CPU Damn, is this 6% of the whole CPU?!
- rkwz 1y agoCSS animations can sometimes cause weird performance issues or even crashes. 10 years back, animating box-shadow caused browsers to crash for our some of users by consuming a lot of memory: https://www.sheshbabu.com/posts/my-binary-search-debugging-story/ https://www.sheshbabu.com/posts/my-binary-search-debugging-s...
- syngrog66 1y agoI love all things perf but stopped reading pretty early once I saw enough foundation mistakes (after which all else is folly anyway, haha): 1. making a note-taking app in 2025: 1st mistake. cuz well solved space with great existing tools/options going back to the 80s/90s 2. as a GUI 3. with animations (in a note taking app?!) 4. in a browser
- userbinator 1y ago> Don't animate There, I fixed it. I have a custom CSS that kills all animations whenever I'm forced to use a "modern" browser, and it definitely tames the web.
- farzd 1y agoI recently created a voice notes app in react-native / expo. And I have a waveform that updates according to the multimeter (audio input) From my first try, I immediately had the performance monitor visible because I knew this could be RAM intensive. I iterated a few times until I settled on SKIA and boy, the performance was night and day.
- fitsumbelay 1y agoExcellent dive that covers a bunch of stuff, thanks for this. The brevity, tho. Masterful and very appreciated
- seabass 1y agoI’d be interested to see the performance of the same visualizer in a canvas or animated svg instead. Forcing these animations through the dom seems a little absurd to me, but I’ve been surprised by web performance before.
- torginus 1y agoDid throw together a quick SVG example - on my computer, a dummy page with just this animation spends 1ms rendering, so basically a solved issue - and cleanly.
- bandrami 1y agoIs the information conveyed by this animation actually useful?
- kookamamie 1y ago> On my M2 MacBook, the renderer process is now using 6% CPU Looking at the animation, I'd wager it's still way too much CPU use for what it is.
- HellDunkel 1y agoThe fact that this little animation can have such heavy performance impact tells us one thing: CSS design is flawed. That‘s it. That‘s the whole story.
- raincole 1y agoIt really isn't. How can the browser know if an arbitrary animation can change an element's height? I'll bet 10 bucks this is equivalent to halting problem. Unless you 1) don't support full SVG spec or 2) separate SVG elements from the layout completely, it's not a problem that is solvable by browser. The developers need to wrap their animation in a fixed size element and it's very reasonable to expect them to do so. Plus, the CSS spec doesn't prevent browser vendors from optimizing this specific use case if it's really that needed. (Of course in the case of this simple web app in OP, the correct solution is to not use animation at all.)
- unsupp0rted 1y ago> On my M2 MacBook, the renderer process is now using 6% CPU (down from 15%), and the GPU process is now using 6% CPU and less than 1% GPU (down from 25% and 20%) Ouch. All of this for a tiny visualizer animation.
- Maro 1y agoCool article! > On my M2 MacBook, the renderer process is now using 6% CPU (down from 15%), and the GPU process is now using 6% CPU and less than 1% GPU (down from 25% and 20%). This still feels way too much compute for a tiny animation updating a couple times a second.
- paulmooreparks 1y ago> On my M2 MacBook, the renderer process is now using 6% CPU (down from 15%), and the GPU process is now using 6% CPU and less than 1% GPU (down from 25% and 20%). Wait, this is supposed to be an improvement? 6% CPU for a lame animation?
- peanut-walrus 1y agoOk, but we can all agree that even 6% constant CPU usage is way too high for a note-taking app, right?
- DamonHD 1y agoThat may be 6% of the lowest clock speed of one slow/efficiency core. Still far too much, but maybe a little less extreme than it appears.
- imcotton 1y agoDoes anyone have the courage to perform a similar inspection on the Cloudflare homepage like the author did? On my M4 Mac mini, Safari lagged with single-digit frames per second (FPS), which scared me so much that I had to close the page as quickly as possible.
- monster_truck 1y agoAn alternative solution to this is to place the height animated objects inside of containers with a static vertical size that is equal to the maximum height of the animation
- amelius 1y agoThis is why I do everything on a canvas nowadays.
- torginus 1y agoMy personal call would be to use SVG for this - you can do CSS animations there just fine without triggering layout. Not a frontend expert but don't see why that wouldn't work.
- soulchild37 1y agoThe lesson should be don't use Electron, animating height in AppKit has no problem
- astura 1y ago>On my M2 MacBook, the renderer process is now using 6% CPU (down from 15%), and the GPU process is now using 6% CPU and less than 1% GPU (down from 25% and 20%). I honestly can't imagine typing this out and patting myself on the back rather than thinking "wtf am I doing? It's 2025, I have a high end laptop, and this is a note taking app. The total resource utilization should be close to zero." Modern devs are fucking hogs.
- naikrovek 1y agohere's an idea - don't animate anything on a webpage. Just. Don't. NO ONE needs animation to convey information, unless that information is an animation, such as in an educational context, where interactive things demonstrate what is being taught. I don't need to see your widget spin in 3d while I scroll down the page. I really don't. I don't even want to see that. Web pages are slow because people make them slow. Stop making them slow.
- Cthulhu_ 1y agoPrevious discussions / submissions: https://hn.algolia.com/?query=Don%27t%20animate%20height https://hn.algolia.com/?query=Don%27t%20animate%20height
- peterisza 1y agoSo good to see a developer who actually cares about resources. Thank you! I usually develop my apps on a 1300 MHz single-core Intel Atom mini PC from 10 years ago. When something like this goes wrong, the app becomes unusable and I immediately notice it.