3 ms·
Slack has to be one of the worst pieces of software I have seen based on what it does and how it behaves. It gobbles CPU and memory to do something that should
by bborud 10y ago
Slack has to be one of the worst pieces of software I have seen based on what it does and how it behaves. It gobbles CPU and memory to do something that should require neither. It is offensively wasteful.
- mordant 10y agoAnd yet Slack runs just fine on my 2016 12" MacBook, iPhone 7 Plus, and iPad Mini 4.
- coldtea 10y ago"...with a single team of 5 and 2 channels". Seriously, it's not about "running just fine", it's about how many resources it uses. Even the startup time is awful for what it does. And the Slack team itself recognizes that there are issues -- as seen in TFA: "However, these capabilities come at a cost: the desktop client can use a lot of memory. This memory footprint increases as the user signs into more teams, as each team runs in its own webview. More memory usage means worse performance, degrading our customer’s experience of Slack and their other applications." and: "At the time of writing, about 36% of active Slack users are signed into more than one team in the desktop app. 17% are signed into 3 or more teams, and 5% are signed into 5 or more teams. Each of these teams is running the full JavaScript web application and maintaining and updating the DOM tree as the state of the team changes. This application can consume between ~130MB (p10) and ~960MB (p99) of memory depending on team activity and UI state."
- bborud 10y agoI suppose you may not know any better. And I am not saying that to be mean, I'm merely pointing out that your frame of reference may not be the best to judge how well the desktop Slack client was done with regard to resource use. You may not understand just how few resources the desktop client could reasonably be expected to consume. And you would not be alone. Over the past 7-8 years I'd had to teach people how to benchmark things. I see people measure things and then use their first result as the performance reference. Sure, they can see relative changes, but if you are orders of magnitude off a reasonable result, a relative reduction of a few tens of percent is still orders of magnitude off. As a developer you should have an idea what a _reasonable_ number ought to be. For CPU, for memory, for latency, for anything you care to measure. "It runs just fine" isn't data. It isn't a useful metric for performance.
- joekim 10y ago> "It runs just fine" isn't data. It isn't a useful metric for performance. I don't see any claims from "mordant" that their anecdote is a useful performance metric. If anything it'd be a data point that could be used as a user experience metric. ie. X% of users in the target demographic agree with this statement, "works fine for me." The point was a counter to your claim of Slack being, "offensively wasteful". Further, isn't "offensively wasteful" equally useful as a performance metric? If you're experienced in performance perhaps you could share some of your "reason numbers" and contrast that to measurements your made against the Slack client.
- bborud 10y agoBy "offensively wasteful" I mean off by orders of magnitude. At which point the problem isn't one of mere programming but of actually having some idea of what you are doing. Recovery from this state of affairs doesn't happen by telling people how to fix concrete, individual things, but teaching them to think about what they are doing and to analyze things. In order to know when you are off by orders of magnitude you need to have some idea of what is reasonable before you measure. If the reality you achieve is way off what is reasonable, you either need to change your perception of what "reasonable" is or you have to face the possibility that you may not have done a good job. A chat client that deals with perhaps 3-4 teams and perhaps 200-300 people should not require 1Gb of memory and it should consume a negligible amount of CPU. Any way you slice it that's a LOT of resources per user, per team or per communication volume. So Slack miserably fails even cursory glance at workload/resource usage. You can start off with the lower layers: speaking a chat protocol. How much resources should that eat up? For a chat application: too little to measure on a modern machine. (I spent most of the early 2000s working on web-scale web crawlers on much, much weaker server machines than even cheap desktop machine is today). The IO should have trivial cost, the protocol parsing should likewise have trivial cost or you have messed up badly. Then move on to the internal state. Draw it on paper. What are the main structures you will be needing. How much data do you need to keep in memory, how much space does it need to take, how do access it and manipulate state? What is a reasonable CPU expenditure? Next is the UI. How do you make it responsive. How do you make it not gobble up tons of memory. Are there tradeoffs you can make? How do other applications do things? Where are the resources wasted? One doesn't produce a resource hog like Slack by doing one or two things in a wasteful and sloppy manner. One does it by having the wrong attitude and systematically doing a bad job.
- ris 10y agoAnd yet I can do internet chat just fine on my Names three outrageously expensive and highly powered devices...
- frik 10y agoit reminds me how lean common IRC clients are (written in C like mIRC). 15MB RAM and less than 1% CPU is enough for 2 networks and several channels (even with hundreds persons in a channel). Incidently it was also mIRC that showed that Intel removed some CPU features from the first Intel Atom CPU gen. Processing lot's of text isn't within the capability of Atom CPU, something even a Pentium 3 had no problem.
- bborud 10y agoI used ircII under various UNIXen and the resource footprint was even smaller. That being said it had a negligible UI footprint since it was a curses-based text UI, doesn't embed media content or render text in a GUI, and it doesn't really do much. Slack does a lot more, but it shouldn't need to burn CPU while doing nothing. But it is an illustration of how little resources you actually need for IO, simple state management and dealing with the protocol layers. You'd accept bloat in all of these areas to get more functionality, but not by orders of magnitude. Out of curiosity I downloaded ircII-latest, ran `configure` and `make`, and then started it up (about 30 seconds from clicking the link to starting the compiled binary btw). Initial memory footprint on startup was 465kB. Now it is up to a whopping 604kB. As it is mostly idling (very little chat traffic on the channel) the CPU use is at 0.0%.
- ris 10y agoIndeed - my frequent complaint is how opening slack and trello will use up half the memory on my small laptop.