What are we supposed to do about stuff this? Like I wrote a video game https://play.basketball-gm.com/ that lets you open multiple tabs for viewing multiple screens even while simulation is occurring in another tab. But Chrome recently stopped running the simulation if it's in a background tab. Putting my simulation code in a Shared Worker would be nice, except Safari and IE will never support it and it seems likely to be deprecated soon. Service Workers kill anything that takes over 30 seconds, so no long running processing allowed. What do I do? Go back to writing desktop apps that nobody will install?
It is. But then you open it in multiple tabs, because that's how people use websites.
Unless I'm supposed to re-implement tabs within my single page application and then force it to only let one tab run, which I guess is possible but horrible :)
Opening another tab creates a new bakery, not a view into the same bakery. (This only works if you haven't played before or clear your cookies.)
Edit:
If you really want to keep the same functionality then you would need to bring server communication into the mix. It's possible to either run the simulation server-side, or at least communicate the state between tabs using a server.
If you send an email in one Gmail window and it shows up in the other window, then I would guess it receives a message from the server to update.
The point still being, with this change you can have only one tab doing server communication at "full throttle", which may kill whatever gameplay elements make the players open this game in multiple tabs.
I'm not sure on the Chrome implementation, but I think all of the visible tabs would be foreground, not background. So the issue would be refreshing when changing tabs. (And also communicating between visible tabs).
The last time I played, opening a new tab would create a view into the same bakery, but it each tab diverged based on RNG. This allows you to cheat by, for example, taking multiple risk free chances at wrinkler drops.
Yes? I mean, you have to admit what you built is the epitome of edge case when it comes to how a browser is typically used, and is actually exactly the type of thing they want to optimize because basically if you aren't looking at the tab, it's not being used (generally).
I think what was meant by edge case is how you've architected this. Going by a statement in another comment of yours:
> It is a pure SPA, you just have the option of opening multiple instances at the same time. Like I can open gmail in two tabs, but it's still an SPA.
Gmail just runs the UI in the browser though, the actual work of processing, receiving and sending mail is not done in a tab. The tabs are just views into the system.
It sounds like you are having one tab as both the client and the server, and separate tabs as clients to that other tab, which is pretty edge case.
As someone else suggested, you could move the processing to the server, but I imagine that's not feasible because then you are centralizing the processing and you're paying for processing, not the people visiting.
The more appropriate way to architect this (to my eyes, so take it for whatever you think it's worth) would be to use JS to manage tabs within the application (which you mentioned elsewhere already). The really simple way to implement this might be to have the JS tabs just contain an iframe to the prior implementation's real separate tab URL (since it already works that way, there's not likely to be any security issues you have to deal with).
The way you architected it is uncommon, though. For example, with GMail, that you mentioned as achieving a similar effect, server communication is involved.
Make it a single page thing and spread the image out over multiple desktops. Make it a real desktop app instead. I do think Chrome / Google is (if they go through with this) actively going to fight against using the browser as an application platform though. At the very least they should give notifications to webapps that they are about to go to low-power mode, act differently when on a power cable, and check whether the tab is visible or not.
This isn't a full solution, but perhaps inter-tab communication would work? Use whichever tab is focused as the master, then other tabs send messages to the primary as they need work done. It wouldn't work when none of your tabs are focused, but perhaps that's an acceptable constraint.
That might work, but it's much more complicated and given the issues I'm already facing, I wouldn't want to rely on that communication actually happening (maybe background tab won't be able to send a signal to the foreground tab, since JS is apparently not running in the background tab).
Could you create a tabbed interface that is just a dumb view of a server state communicated over websockets? Then the user could just open the page in n windows (each on its own tab) and have the same state represented in each?
Problem is, there is no server. All client side. So the tab on which you click "run simulation" is effectively the "server", except it stops running when the user switches tabs.
In some ways it's limiting, but overall it's a good thing. Less complexity, less network transfer, works offline, etc. It's just more challenging to do in JS/HTML than in your choice of traditional desktop app dev tools.
Oh, you’re volunteering to pay for it? How nice of you!
</sarcasm>
Cost is a real concern for these things. The tradeoff is running things on client or expensive backend or spending ages building a custom, efficient backend.
There are perfectly legitimate reasons to not have a backend. In fact, if something can be accomplished without user sending his data to some remote server (as opposed to just fetching data from the server), I believe it should be done this way.
As a workaround, in the meantime, have you tried using several windows, not just tabs? Of course, none of them can be minimized, but they can be covered by other windows and should still run.
Their own Google Play would be impacted otherwise. Good to hear, since the only thing I use Chrome for is Google Play (and any other, one-off, old-fashioned sites which require Flash). Why in the world does Google still require Flash for... anything?
As a developer you need to decide whether or not to support a browser, and if that browser doesn't provide the APIs you need then you should drop support for that feature in that browser. In this case, if Chrome is making a change that you can't or won't change your game for then the solution is to detect Chrome and display a "This game only works in a single tab in Chrome. Try Firefox!" message if a user opens it in a second tab.
I prefer Firefox, but since Google broke Google Voice (now Hangouts) plugin for FF users, I've been grudgingly opening a Chrome browser each time I want to make a phone call to US number.
Some people are in the fortunate position where they can choose to ignore large sections of their potential customer base. Someone who writes a game as (presumably) a side project is in exactly that position.
Nowadays, one writes ad-supported mobile games that nobody will pay for. ;)
Would it be possible to just declare "Best played in Firefox?" It's a bit gauche, but if a browser's engine has a behavior that isn't really compatible with what you intend to do, that's the browser's fault.
Measuring it is easy. Defining it is what's hard. If three processes each have the same 10MB executable mapped into memory, plus 10MB of heap data, how much memory is each process using? There's no easy answer to that question.
Defining it is what's hard.
how much memory is each process using?
20MB.
Oh but they are sharing the pages the executable is mapped into.
So how can you can you say they are each using that much RAM?
Because that 10MB of RAM won't be freed until the last process exits. Each process is using 20MB of physical pages. If only 1 was running it would use 20MB.
The semantics that each process is sharing 5 HUGEPAGES of heap isn't really important as even if 1 was running alone it uses that much memory.
If you are sharing that much data with executables that you have this problem there is some low hanging fruit for memory optimizations you can do.
Oh but you aren't *actually* using 60MB of Heap, only 40MB
Indeed. And in cases where these 3 children have the same parent you look at the ParentMem + 40MB (child binary+individual heaps) to report a better picture.
Shared/unshared semantics are not hard. Have you ever read /proc/$PID/maps ? Because it clearly labels what is/isn't shared physically. When you are optimizing for memory usage you rarely look at shared readonly pages as the kernel put them there for you.
Defining it is what's hard.
Injecting an interpretation before taking a measurement is not sound science or engineering.
Measurements inform Interpretation. Not vice versa.
Sure, shared/unshared semantics are not hard. How do you map that to a generic concept of "usage"? There's no right way to do it.
It doesn't really make sense to ask "how much memory is this process using?" Instead, you want to ask questions like "how much memory are all of these processes using?" or "how much memory would be freed if I terminate these processes?" or "how much extra memory will be used if I start another process?"
What's hard is understanding which question you want to ask in any given situation.
There's no right way to do it.
What's hard is understanding which question you want to
ask in any given situation.
I don't see the issue. You admit that answering all of these questions is easy. The hard part is lawyering which question to ask.
This is not a data reporting problem.
This is a data interpretation problem.
A good reporting tool should not be interpreting (or forcing an opinion) on the end user.
You believe this problem is hard because you are forcing an interpretation to exist before you take a measurement. When you should not be interpreting until after measurement. Injecting an interpretation into a measurement process fundamentally changes that measurement.
Measurements inform your interpretation. Not the opposite.
You seem to understand what I'm saying
and agree with me
Literally the opposite. Your initial statement was
Measuring memory usage is hard on a modern OS.
Which you've agreed was false as /proc/$PID/maps is easy to read. Then said:
Defining it is what's hard
But these statements are not mutually inclusive nor does the later imply the former.
I stated measuring is literally the simplest thing. You said ah but what you measuring. That isn't dependent on the tools, or OS. So why did you state it was?
Yeah, it depends on what exactly you're asking for. But one can provide different visualizations for different questions.
As a typical computer user, this is what I care about:
- who the frak is eating all my RAM?
- which processes should I kill to get some memory back?
Whatever the weird sharing things are going on, the memory is ultimately linear. So show me a large rectangle subdivided into sections, each one representing memory associated with a set of processes. One section for "this memory is used by Chrome.exe". One for "this memory is used by Chrome.exe, X.exe and Y.exe". One for "this memory is free".
When I click on a section, it should highlight all the processes that share this memory. When I click on a process, it should highlight all the sections this process uses or shares with others.
This way, I could quickly see who's wasting my RAM and how many processes do I need to kill to get some chunk of memory back.
Exactly, I usually find that chrome is eating a little more than what it's displayed in task manager in windows ;) I have no idea how it can achieve that to be honest. Restarting it seems to bring back the 5-15% missing ram in my case.
If it doesn't, then why does it grind to a halt eventually on both Mac and Windows? Firefox suffers from the same nonsense as well. In fact, Safari seems to be the ONLY thing I can keep open for more than a day without a process restart.
You're doing something wrong. I use Chrome on Windows as my main now and I usually have more than 100 tabs open. I just switched a few months ago from Firefox on Linux, also usually with 100 tabs or more open. Both are very stable. Chrome is worse with handling tons of tabs, but I certainly don't have daily crashes.
People who have extremely unstable/inconsistent experiences with these platforms usually have a rogue extension or some other problem lurking beneath the surface.
Also consider occasionally VACUUMing your browser's DBs, and on Firefox, taking advantage of the profile reset option.
For every person that has my symptoms, there is someone to counter it. I'm not going to get into an argument about how I'm using my browser incorrectly. Every computer / browser combo I've ever used exhibits the same thing, and I'm pretty religious with keeping things trim and clean.
Why is it that whenever somebody has a problem that less than 100% of people experience, the response is always "you must be doing it wrong" rather than "I must be lucky"?
Because the quantity isn't just less than 100%, it's a small minority. Chrome and Firefox are among the most widely-used pieces of software in the world. I'm not saying they don't have weird bugs, but they don't crash daily for most users.
While the OP may not be doing anything "wrong", he is almost definitely doing something unusual, or has deeper issues like malware or malfunctioning hardware.
If the ratio were inverted and most users were experiencing daily crashes from normal use, I would consider myself lucky. That's just not been my experience with Chrome/Firefox.
You're right. I was confused because in your other comment you just said they were doing something wrong, and I didn't realize you'd reversed course on that.
I would suspect a majority of the world does not keep dozens of tabs open, on an computer that never shuts down. You have to remember which forum you're on here. Any software issue, usually rears its head relatively quickly from one of our machines around here.
That's the use case I'm most familiar with. I've done this on many different machines for many years and not had anything like a crash once a day. I stand by my belief that your negative experiences are likely caused by a rare collision of variables and not representative of the typical experience among similar use cases. As I said in my post, it's totally legitimate that such an atypical experience may be caused by real bugs, but it's still an unfair generalization to say that Chrome and Firefox crash daily.
Does Chrome only use RAM if it thinks it is available? (i.e. if it starts detecting that other process are running and eating up RAM, will it use less?)
Nope - it's fairly happy to choke everything else or even crash (tabs or the browser) when RAM gets too scarce. It does seem to have some capability to restrict usage, but it's not thorough enough to avoid performance/crashing issues.
With 4 GB ram, Chrome will happily give ~2GB to any tab that requests it in a couple of seconds, leaving me with an unresponsive Windows aggressively paging memory to disk, only to give whatever it finds... back to chrome
It does try to reduce what it can in low memory situations (less "pre" optimizations like prefetching, prerendering, even dns prefetches and stuff, V8 gets more eager to throw out "potentially unneeded" code, tabs get suspended and written to disk, heuristics can get shut off, etc...), but it can't change what the page does.
If a browser tab wants to store 300MB of data in RAM, or wants to throw a shitton of stuff at the DOM, Chrome needs to oblige.
I agree, the Presto engine was (and still is) super efficient.
We may see something similar come out of the Vivaldi project which is headed by folk who led the Opera <= v12 development who know very well what was lost when Opera moved to Chromium based web engine.
No. Vivaldi like new Opera is just a skinning project. They made UI slightly better, added some missing functionality (mostry tabs and gestures), but they do not touch core engine.
Case in point fresh Vivaldi on startup makes 4 connections to Google just to say hi, and will keep sending google delicious pieces of data throughout the day, not to mention hardcoded google DNS in case yours is too slow. How about spamming my local network with chromecast UDP garbage? or enumerating shares on startup? WTF would you even do that?
Personally I still have Opera 12.18 installed on every computer as it still is the most swiss-army-knife browser out there for countless reasons. Most of the webpages can be made to work properly in it by adjusting the site preferences.
One thing I am yet to see any of the new browsers be capable of is complete popup blocking. Opera 12.x excelled at this and a complete blackout of popups is 100% achieveable.
I've seen several waiting games already that choke on Chrome, and have settings to activate a worker that keeps them unthrottled. Looks like this will break all of those solutions.
Wouldn't Cookie Clicker be doing updates based on time deltas? There's no guarantees a timer will fire after the desired time even without this update. Or am I missing a feature that requires it to be able to continually process in the background?
Seconded. Chrome used to crash ~1/month on me but ever since I started using The Great Suspender I haven't had a single incident and it's been well over a year.
If you are using The Great Suspender, chances are that background tabs are going to be fully suspended so the aggressive throttling isn't even needed.
tl;dr - Great suspender is even "more aggressive" than the outlined throttling, as it fully suspends the page and returns all CPU and RAM to you, so it's a great solution for people interested in throttling background tabs.
I use the GS and love it however I'm not sure it returns even most of the ram. Maybe 50pc. Certainly Javascript CPU usage is reduced however chrome seems to slow down based on how many tabs you have open regardless of what they have in them.
I meet many tab hoarders (always open a new one, never close any, ending up with hundrets), but just can't wrap my head around it!
I hate having more than 6-7 simultaneously open because it gets increasingly harder to keep an overview of what you're doing. The same applies for IDE tabs or windows. Too much of them and finding the right one becomes increasingly hard, and losing the thread more likely.
Tree Style Tabs is a nice idea, but I found the balance of aesthetic and speed for me to be with pressing Ctrl+L and then inputting a few letters relating to the open tab I seek, then just pressing Enter and switching to the tab.
Interestingly, Mozilla is trying to move in the same direction by supporting the same extension APIs as Chrome because they are more maintainable/secure/universal/performant but continue to struggle with adoption because things like the Tree Style Tabs extension are not possible with that api https://blog.mozilla.org/addons/2015/08/21/the-future-of-dev...
Hmm, looks interesting. I've tried out several tools for organizing tabs, but none of them really worked as well as aggressive manual "garbage collection" for me. Usually the problem was that switching between groups (or whatever concept) was too complicated, or part of the tabs were hidden too much. Maybe I should give this one a try.
If you have to deal with a lot of task switching, blindly closing browser tabs would be a huge waste of time. You can individually check each tab before closing the ones you don't need, but that takes time and cognitive load.
So I leave them open until the computer can't handle it.
Much easier in Firefox since you just start typing the name of the site then choose to switch to that tab from the drop-down menu. Or you can pick it off the (down-arrow) drop-down list of your tabs, or just use the mouse-wheel to scroll quickly through all the tab headings....
I typically have 100 or so tabs in Firefox. I did get over 600 once, but that's too many ;-)
Well, it's quite similar to garbage collection, or disk defragmentation. It comes with some cost but improves performance, so it's all about finding the best trade-off.
When I am doing coding work, I often have a ton of tabs open. I will keep different documentation tabs open to the relevant sections. I will keep some tabs with answers on StackOverflow.
My open tabs are kinda like my working memory. I could close them and reopen them as needed, but it is easier to just click a tab then to try to find the thing again. In addition, sometimes the pages I am looking at have dynamic navigation, and closing and reopening the page will require a good deal of navigation to find the section I was looking at. Plus, the overall time to reload the content, where if I just have the tab open there is no download time.
Also, the tab icons help me remember what I was looking at. I will often keep tabs open for what I wanted to read later.
Yeah, I basically do the same thing, but that hardly ever requires 10 tabs for me. When that happens, finding tabs becomes especially harder once their width starts to shrink.
As for read-later, I usually pull them into the bookmarks bar (top level, directly visible) to free up some space.
I used this years ago, then tried to cure myself of tabs by forcing myself away from it. It didn't take, and I completely forgot about this, going back to The Great Suspender (which is also great). Thanks for reminding me about this!
Are you taking about tab center? That thingy had a number of issues last I checked, I especially remember there was something weird about the layout of it. I think it extended all the way up on the side of the menu bar. This looked weird to me (and I think UI is overrated) and makes the toolbars slide when I open/close the tab drawer.
I'd recommend using one of the extensions instead.
OneTab can make a huge difference. And being able to do a quick find on your list of old tabs certainly makes things easier for those of us who are, uh, a little over the top when it comes to opening tabs.
The only bad thing is realizing you have a couple hundred old tabs to go through and delete. They really add up over time.
> June 2016 Update: We're currently working on new features including an option for multi-PC cloud sync. This has taken quite a few months to put together due to the huge number of extension users that the cloud sync will need to support. Thank you for all of your feature suggestions, please keep the feedback coming. -OneTab
I'm using tabs in exactly the same way. For the read later tabs something like http://www.tabsnooze.com/ might help. I haven't tried it yet, but it sounds good. "Save to Inbox" is another option.
As I said in my comment, bookmarks don't work for sites with dynamic navigation - you won't end up in the same place when you load the page from a bookmark.
In addition, you have to take the time for the page to load, you have to delete the bookmark later if you dont want to clutter up your bookmarks, etc.
I don't know whether that exists for chrome too, but for firefox I find tree-style-tabs very useful to organize my open tabs when developing. A top-level tab for the different topics (e.g. one toplevel tab for a project's github issues, one each for the libraries I'm using, one for news,...). Then when switching tasks I can just minimize those.
I use my tabs as a task list. I close them once I have read the page, taken action on the knowledge in the page or decided it was too stale to matter anymore.
There might be a more effective way to accomplish what I do with many tabs, but it works for me at the moment so I haven't attempted to find a browser plugin or extension to change the behavior.
I use many tabs as a stack of pages when debugging, researching, or reading aggregate news feeds (reddit, hn). It usually starts with a Google search or two, in which I open all links I think _might_ be relevant based off of what information google can provide me from the results page.
From there I read through each and open any further tabs if anything is linked too in the text (I hardly ever actually click navigate, it's most always a new tab). Generally this only goes about 3 deep (search, first page, sub links). I will close any pages that I find have no useful information, but if there is anything I think might be useful in the next 30 minutes I just leave it open. I do this for each of the results I originally opened. Somewhere in the 7-15 tabs generally is the answer I'm looking for or at least there is enough information I can answer my question. If any link is particularly beneficial, I will bookmark it. Generally the time span I have a large number of tabs open is no more than an hour before I'm finished and close everything out.
Chrome handles this nicely, if you are on a page and open a tab, it will place the new tab next to the current tab, instead of at the end of the tab list. Some sort of tree tab view would probably work much better for this, but Chromes behavior isn't bad for what I do.
I have this pattern. It plays really well with the 'close all tabs to the right' menu option, because once you've found whatever you were looking for, you can nuke all the leftover tabs.
What I'd really like, though, is a 'close all descendant tabs' option.
I tend to lean towards tab hoarding. I use Tab Corral to automatically close out old tabs, which works out pretty well. Rather than having to evaluate whether I still need a certain tab up, it quietly closes it after a bit, usually once I've forgotten about it.
Tabs are a todo list. I've currently got two pinned tabs open, JIRA and bitbucket tabs that act as placeholders, one unfinished email, one spotify playlist for work, one podcast, and 6 articles to read. And that's only because I recently restarted Chrome. I can easily have 20+ tabs open if Chrome has been running for a week or two.
For me, it's more that I use my tabs as reminders for things I need to do or things I want to read (I know, this is a pretty bad system, and I try to use a better to do list and tools like Pocket on top of tabs, but I always seem to drift back to just tabs simply because it's the lowest effort system for me to ensure I remember). If I'm working, I'll generally just open a new window and keep the tabs I'm actively using there and get to the backlog later.
I am a tab hoarder I guess. I use them to organize my work. Every window is a project (right now I have 5 of them) and all the tabs (20-30) are mostly resources I need to fulfill them. If I have completed a project or decided to stop working on it I close the window and get rid of all project related pages at once.
I don't use favorites or bookmarks because usually I don't need a link permanently.
Edit: I actively try not to get too many. If it starts to hide the title/favicon completely I start to close them again until I can recognize them by title without clicking through them.
I don't know about others. But for me it's a kind of lack of organization combined with poor technical implementation of UX. As I do things, whether they are reading, researching, task completion, etc. tabs start accumulating and the lack of any kind of management functionality in Chrome makes it rather difficult to clear out the dormant tabs without manually going through every single one.
Firefox tried using ... I forget what they called it and renamed it to ... some kind of grouping of tabs. But I think there would be an opportunity for some smart grouping by, e.g., time, i.e., tabs opened within certain periods of time are somehow visually grouped, or type, i.e., using some google foo to classify the URL to differentiate between things like food, news, dev/coding, scientific related tabs.
I'm just saying, it is annoying and boring as hell looking at dozens of tabs that are all gray because they are so contracted. There needs to be a better UI solution.
I use my tabs like a generational garbage collector. Tabs to the left of the current tab are processed, tabs on the right are to-be-processed. I'll go to a page like reddit or HN and spin off a dozen tabs of things to read. Then I'll go through one by one and either process, delay or close.
Once I reach about 250 - 300 tabs, I'll do a longer generation sweep and go through all the tabs and try to get it down to less than 100 or so.
Basically, I'm never in need of finding any specific tab. If I want the content from that tab, I'll just open a new one and navigate back to that point. The tabs are really a lightweight to-read list.
The tabs are transient todo list. This is something I need to finish researching, this is a documentation to what I'm working on, these are 3 great articled I want to read in the evening.
Why do you need an overview? It's like stack frames: you can limit your scope to what you're currently doing. The other tabs represent stuff that's "parked" and you aspire to come back to.
(This is why tabs are better than windows for this, because they maintain a linear order while most systems will re-order window order if you visit the windows)
My tab-opening habits predate tabs, because I was raised on Netscape Navigator with a modem using "open in new window" instead. I would read down a page and open interesting-looking hyperlinks in the background, so I didn't have to wait for them to load. Another advantage of this technique on modems was that I could close down the line and carry on reading.
I use it like a kind of mental stack or breadcrumb. The tabs most relevant to my current task are on the right, usually no more than three. The rest of the tabs is how I got there, occasionally serving as references. Once I get to the point of making it hard to tell one from the other I tend to do a garbage collection sweep. Sometimes, when switching context, I just reopen Chrome to clear the stack.
Incidentally, the note papers floating around on my desk works in a similar way, although they are more of an unordered set. Only one or two are relevant, the rest were helpful at some point but no longer are. Cleaning my table usually results in me dumping the whole thing in the dustbin.
The combo of The Great Suspender + Session Buddy makes tab management so much better, and easier on resources.
Leave open the tabs you know you'll need soon(ish) and let the Great Suspender throttle them, and save (then close) groups of tabs/windows you won't need right away using Session Buddy.
Unfortunately, I find a lot of sites don't play nice with The Great Suspender. Lots of js-heavy sites would break when they were "resumed", resulting in my place in an article/podcast/video/etc being lost. I'm glad Google is addressing the issue; hopefully they'll do so in a way that's more transparent to the user.
Is there anything that does the opposite of this? A lot of our current tests run in a browser window, and generally I leave it in the background as I don't want to stare at my tests running. However, when they are backgrounded they slow down and sometimes fail due to timeouts. I haven't actually tried, but does opening a new window get around this even if it does not have focus?
In my project the serviceWorker only has a setInterval that will trigger the main loop.
When the setInterval was in the main code it would slow down, a lot, when the tab was on background. That made the generated music go slow aswell. With the serviceWorker the clock is rock solid, even when the background app can't keep up, the timing is solid.
Service Workers are specifically designed to be short-lived and temporary [1]. They should be tied to events coming from the main script, which is subject to these new timing limits in the background. You should check your app against Chrome 56, as you might be in for a surprise.
Without special APIs to request it, this would be as ubiquitous as cookie warnings, making it highly annoying (and thus a bad business decision for chrome). And at least for the case presented in the article proper APIs without this throttling already exist.
I'd guess it's because most users would have no idea what to choose, would have no idea what the affect of each choice would be, and if you add more text to explain it, most users will not read it. Pop up the notification too often and it becomes a nuisance.
Better IMO to bury the choice deep in settings or something, for power users, if you even offer the choice at all.
> I'd guess it's because most users would have no idea what to choose
Sounds like you could kill two birds with one stone: allow a non-lame web and encourage users to learn what that means. We can't complain about tech illiterate users with one corner of the mouth and then make them decide what goes with the other.
> if you add more text to explain it, most users will not read it
They're not users. They're the blight on the back of users. Why cater to them? Is someone who looks left and right before crossing the street a "power pedestrian", too?
"This tab wants to use a lot of [RAM/CPU/GPU] while it is in the background, is that cool with you?
If you don't know what this means, it's best to select no. Fuck that site anyway for using a lot of resources without making it obvious that it's doing something heavy, or asking first, or explaining what is going on. If they don't like users clicking no or even navigating away from the page, that's their problem. If you read this far, click here to claim your Avid Reader Achievement Trophy."
Fine, and most "webmasters" are really just hack frauds. On my planet, it's their job to get a room and ours to burn it.
edit: Usage implies intentionality. Intentionality implies awareness. Not being some super guru, but more awareness than "is text, won't read". Therefore, while the drive to shovel hardware on people, to create needs you then get to fill, did indeed bring all sorts of people who now get called users to the table, I don't consider them such. It's like someone who has a seizure on dance floor is not dancing, or like someone you forced to be somewhere is not "visiting that place". And I know people don't find it rude to just ignore a claim of how something ought to be with "but this is how it is, which is why it can and must be that way", which is why I say what I say. If someone does bad things and won't discuss them, it's absolutely up to the people who are aware and care to act. If you don't understand poetic language unless it's flowery that's your problem. So yes, I stand by what I said, just not by what it might evoke in the minds of some readers.
This sounds a lot like the arguments in the 80s about how GUIs were bad because they let anyone use a computer. Empathy makes it easier to write good software.
I like the change as a general idea but there obviously needs to be a manual override. Like, I don't want websites to access my camera without permission but obviously I want to allow some websites to do that. A similar permission could be used here and is perfectly backwards compatible:
1. a tab exceeds its quota and throttling kicks in;
2. you visit the tab to check why it stopped working;
3. you get a permission pop up (like all others) once you visit the tab again, asking you whether you want to allow it unlimited resource usage, noting that it'll decrease battery life of your device.
This would be great. At the very least, I'd like the power to un-throttle a tab myself if I decide to do so - even if there's no prompt, it's important to me that I can let a process run full-speed in the background. Losing that would actually decrease the value of Chrome quite a bit for me.
The amount of people that will understand what that means is not very substantial. Usually asking for more permissions confuses users as well, people get permission fatigue.
That's less "backward compatible" than the suggestion to pop up a dialog on switching to the page, because the page needs to know to ask for the permission.
I'm not sure if that's a good thing or a bad thing. After all, backward compatibility is how we got the semantics of an alert() dialog stopping all JS execution.
These days, due to my annoyance with pages reloading themselves when switching to a tab, I'm really not interested in packing more functionality into the whole tab switching mechanism. Like the back button, it should not be visible to web developers.
request for location doesn't require the page to explicitly indicate a desire, the request is triggered if the page attempts to use the location services of the JS API. sites that want to run unthrottled can't be identified simply by the usage of a certain API, so the developer would need to add something explicitly to their markup to indicate the desire.
i want control over the feature regardless of whether or not the site's developer deems it appropriate.
Every website would start showing such popup. Now (if you have enabled Javascript) many sites show popup to allow notifications the moment you open them. That is annoying when you search for something in Google and have to click "No" for every new page opened.
I can see where that will end up though. Everyone who's app was broken by this change will start playing zero volume audio, then the exception will be yanked back.
With the web poised to be the new platform for applications, there really needs to be some more thought put into how to accomplish that goal. The chrome devs already sunset some solutions in that space, like the HTML5 app cache. Now this. Nobody likes a constantly moving target.
No tab should get the audio exception unless it started playing audio while I was looking at it. (reopen yesterdays tabs counts as looking at it...) If you play audio to get around throttling - you should get zero CPU, not just throttled. If you have work to do in the background that is fine - there is legitimate work to do. However once you are playing audio it must mean the other work is done.
What do I know though? I don't normally listen to audio on the web...
I think they are somewhat stuck with conflicting goals. Online games, for example, play audio while doing other work. But it's probably reasonable to pause everything, including the audio, if you move away from the tab.
On the other hand, if they are using Pandora or similar, the end user probably wants the background tab playing and doing other work (showing current album cover art or whatever so it's there if you switch back to that tab).
I use pinned tabs extensively and I prefer that they are throttled even more aggressively than standard open tabs. As long as streaming doesn't break.
I have an option set in FF's about:config that disables loading of my pinned tabs on startup, so I regularly keep 200-300 tabs open and only activate the ones I need.
Sometimes it takes weeks to clear my tabs because I barely see a performance hit from having so many open.
Unfortunately this doesn't seem to be the way most users are using pinned tabs. Check out the great suspender. The only tabs it does not freeze are the pinned tabs.
Extending that functionality to throttling seems natural to me.
It looks cool. Browser memory isn't too much of an issue for me because I run NoScript and uMatrix and thus most of the tabs I have open aren't each running an instance of Google Analytics and stuff like that.
While this is elegant, its still dangerous. There are online payments that could check whether your booking is complete in the background by periodically firing ajax calls, bulk updates or uploads, etc.
The business decisions a website makes are none of my business, and if they want to use a polling model for billing because $REASONS then that's their problem.
If those sites are using more than 10% of a CPU to do it, then they've made a catastrophic error, and I'd be glad for Chrome to protect my battery from that.
I don't want to have to pin every single tab I want unthrottled - that's a mixing/piggybacking of otherwise orthogonal concerns. Just make it a separate option I can set per tab.
There's no way to know whether or not it has a battery. Maybe it's on a UPS, for example.
All I know is that my desktop runs at about 70W idle vs. 450W fully-loaded. Unnecessary use of the CPU wastes money regardless of whether or not you're using that money to charge a battery.
Even on a desktop machine, you don't want tabs spinning in the background (using electricity) if you don't need the work being done. That's bad for your wallet and bad for the environment.
Seems like the current solution they're advocating for is for sites to do background processing in a [Worker][1].
This seems like a step towards the way things work with mobile apps currently, where the app's main thread gets suspended when its not in the foreground, and background processing happens in separate threads which the user has some degree of control over.
Edit: I meant regular `Worker`s, not `ServiceWorker`s.
Except it should probably be web workers that are unthrottled. However, in the current implementation Web workers do get throttled. Service workers are supposed to be for networking and offline applications, not doing cpu related things. As such, service worker lifetimes are really messy since they don't have real guarantees as to if they will randomly restart.
Yeah, sorry. I keep conflating service workers with the larger concept of web workers. For more intensive tasks you'd definitely use a regular dedicated worker, not a service worker.
I am having a hard time finding where it states that web workers are treated the same as threads managing visual content. Currently timers in background threads are throttled to 1sec minimum interval however workers are not bound by this constraint. I may just be missing something, but I sure hope not. This would adversely impact many games and applications rendering many of them unusable without the web worker exclusion.
An option to disable this would be nice. Some people are using PCs and don't care about battery/temperature.
I just can't imagine tons of games that are out there working nicely. New release is estimated to land on 31 January[0], how the hell are people supposed to update their codebases?
This is going to destroy HLS playback in a background tab. Playing back HLS with JS is already a very cpu intensive, time-dependent process and we've already struggled with the current background tab throttling - a delay like this will all but kill playback or make it stutter to the point you'll wish it's dead instead. I commend Chrome for driving web standards but they've been a huge bully recently.
Chrome's audio detection is quite smart if I'm not mistaken. A tiny amount of sound is usually seen as 'silent' too, since it'd be practically inaudible.
One of the first comments on the link above mentions this as a potential exploit; they said they would watch for people attempting it and attempt to mitigate it if it becomes popular.
It's different because it can't just slow down a running task.
Say you use up 150ms of CPU time. Chrome isn't going to let another timer fire for 15s. Then, you're late on a whole bunch of work that needs to get done, so the next timer takes 500ms. Chrome then throttles the next timer by 50s. And so on and so forth...
But if your script had 1% of CPU, that 150ms workload would take 15s to complete. Then the next workload would be late in the same way and take 50s to complete.
It depends on what you're doing. If you split up tasks and interleaves them (such as: process a few items, stop, set another timer, process a few more), actual CPU% throttling would be better. It would be easier to have certain timers take priority, such as heartbeat responses or notifications.
A timer task is only allowed to run when the budget is non-negative.
After a timer has executed, its run time is subtracted from the budget.
The budget regenerates with time (at rate of 0.01 seconds per second).
I think that would imply that if in any given second, your timer code runs for <= 10 milliseconds, then you will never run out of budget. Right?
So for things like sending out heartbeat packets to keep connections alive, I'm assuming that doesn't count, because it happens asynchronously (waiting for the response, I mean)? If that's the case, and your 10 milliseconds only applies to running JavaScript on the CPU, then 10 milliseconds seems reasonable to me. It's a background tab, after all, it's disrespectful of your users to abuse their CPU more than that.
How about displaying more info about the "weight" of a page, when it comes to downloaded assets, cookies / local storage, RAM and CPU usage? I know there are ass backwards and fugly ways to see all of that, but why can't I see a list of all open tabs, with columns of such info which I get to define and sort as I please? Why not have the option to that info pop up when hovering over a tab, and to show notification icons for certain thresholds, user definable with sensible defaults? There's a lot of things browsers should be doing. So what if 100 people don't care; the one person that does become more aware of what is going on more than makes up for it. *
And just let us allow tabs to grab all the resources they want on a opt-in basis. Why not?
* Before anyone brings up the inevitable economic argument - it wouldn't take a lot of man hours to do these things, I dare say it would just take one or two persons who are capable to be willing and allowed to do them. And compared to all sorts of things that browsers vendors made and get scrapped, you at least know tabs will always use ram, CPU and load assets over the network, so it's not ever going to be completely useless.
Yeah, make that "allow docking the task manager". Though I still miss a total about how many bytes got downloaded, average speed etc. I also miss it in other browsers (though I should have made that more clear, I wasn't meaning to "bash Chrome" -- this frustrates me since the departure of old Opera, with all browsers, I love the powerful web API stuff but I hate the user interface directions).
And to repeat myself, I really do miss something akin to the icon that displays which tabs are playing sound -- not for myself, but because it would allow people to notice the difference between bloated and well crafted pages more easily.
I appreciate they prefer to automatically decide what is best, but I would prefer more gauges, at least as an accessible option. If you hide something behind an "advanced" label, it will just scare people off for no reason. It's not like configurations dialog aren't kinda barren and padded as is. Just fix that and then just put things there, neatly categorized and maybe even searchable, and explain them. People can drive cars and vote for politicians, but we can't trust them to read? Just about any image viewer or video player seems to think more highly of people than browsers of all things do.
Yes. The browser is slowly becoming it's own operating system. Like Oracle making a bare-metal version of their database, pretty soon, Google will just skip ChromeOS, bundle Chrome with a storage driver, input driver, and video and sound drivers, and be done with it.
It's not everything you asked for, but as it stands Chrome does have a task manager (Shift + Esc) that shows CPU usage, Memory, and also how the tabs are grouped process-wise.
I know, but you can use Chrome for a million years, and have resource hogging tabs crash your computer, without ever knowing about that. Even ("X seems to be slowing down your computer, press shift+ESC for a detailed breakdown") would help. The point is for abusive sites to stick out and have that imaginary free market, with the rational consumers and their informed decisions, do the rest.
What I'd like is popping up plain warnings aimed at regular, non-tech user. "These tabs are currently slowing down your computer: <list>." Or, "This tab uses a lot of battery power."
Besides directly providing information that is relevant to a typical user, I'd hope such a solution would finally put some pressure on the companies to optimize their webpages.
This sounds a lot like the problem Android had with background tasks.
Starting in KitKat, a batching mechanism was introduced, so that apps which declared that they wanted CPU or screen resources in the future didn't all have separate timers running, but instead became members of a class that wanted similar things.
One of the most effective features of Greenify, a battery-saving app, is to force all apps (or all apps minus a few that you designate) into the batching mechanism.
The Intent to Ship [1] writes that all six platforms will be affected (Windows, Mac, Linux, Chrome OS, Android, and Android WebView). Yet how does this affect Chrome OS background tabs, which "work entirely in the background and run even after you close the Chrome browser"? [2]
I'd he happy to suspend (and even offload to swap) some tabs from time to time. Too many times I get almost unresponsive tabs where I want to do something but it is just too laggy due to other tabs occupying the cpu.
I would like to see Chrome utilize what I think is the right solution for loading background tabs; I would like it to let you (when you want to) rather than OPEN a background tab, only ENQUEUE a background tab -- opening it only when that tab becomes active, meanwhile keeping a barebones tab with that URL in the tabs menu until you actually make it active or it becomes active the way any other tab would, at which point it loads at the same location in the tabs bar that a background tab would have opened.[1]
If this were implemented then finally I could open 120 tabs in a window for a detailed query (and they're not all loaded, there's zero overhead), then after 11 minutes of reading a few of those tabs, closing the ones I've read and having others load in their place if they weren't already loaded, be left with 87 unopened tabs with which I could close, since I've learned everything there is to know about that subject and I don't feel the need to read the rest anymore: I feel I've found the answer.
As it stands I can become an expert in any subject accessible in a day or two, in twenty minutes - unless, as sometimes happens, Chrome gets in my way. I can do it by opening them in background tabs today - but Chrome will just shit itself after a while because it's stupid and feels the need to open a 99th background tab actively just because I may want to read it in a bit. Come on.
Also there needs to be a way (not necessarily the default way) to open private (incognito) windows opened privately "Except for crashes" meaning that it's open until I close it, by clicking the fucking X button, not whenever Chrome decides to barf all over itself (crash) - which usually happens when it's done using all my memory. If you fundamentally disagree that there is a distinction between the user actively exiting and you crashing unexpectedly, then why not change the text to "Pages you view in incognito tabs won’t stick around in your browser’s history, cookie store, or search history after you’ve closed all of your incognito tabs or Chrome crashes unexpectedly".
Doesn't make much sense does it -- So please make the functionality match what you just promised, and keep pages open until I've closed them. Not you.
This stuff would improve people's experiences drastically. It's too bad Chrome's developers don't care about getting Google more clicks, more traffic, letting people open more ads from Google search results, and so forth - by letting people keep more pages and searches open or queued for opening. And that they don't care about their users and give them what they've just promised. Instead, in Incognito windows especially, this stuff just disappears whenever Chrome decides to crash -- which is often, given that it feels like aggressively eating memory for any tab anyone might want to follow.
The web is about links. I hope Chrome will start letting people follow more of them and not lose their trail if they don't want to keep it in their history.
-
[1] Functionality. Right-click a link, click "enqueue", this should be the same as "open in background tab" except the tab is added with the URL in it and it is not loaded until you actually make the tab active. Right-clicking the tab bar should give you the option (in addition to normal options) "Close all enqueued tabs", leaving just ones you've already opened. Example usage: say I'm searching for an article. I can start by doing some obvious Google searches in a few different tabs. I can go through the results and enqueue each one. Then I can go through the first (when it becomes the active tab, it is loaded) and enqueue any links that might lead to what I want. Then I close the now full-fledged tab when I'm done reading and following links, the next tab becomes active (which might have been an enqueued tab in which case it becomes loaded for the fi...
This is probably a good thing in the long run. Timer-based callbacks can generally be replaced by events, which only trigger when there is actually work to be done. Many JS timers I've seen are needlessly busy-polling.
Whether this implementation affects just timer callbacks or all background processing (eg websocket data events) is a bit ambiguous - this blog post seems to suggest major apps like Slack and Discord will break, but surely they are using websockets and not continuously polling for new data.
Seems to me this is still just an intent-to-implement, i.e., the discussion about the feasibillity of the feature and the exact implementation details is still very much ongoing. It might be useful to contribute to the discussion at [1]. An outline about the implementation details is given in [2].
The dev team also acknowledges this is a breaking change for the web and considers it an "intervention" according to [3]. This admittedly doesn't mean much, but at least gives some basic standard of procedure that sites can follow to keep impact on a minimum.
Also noteable is this bit from the current discussion:
We mitigate this by only throttling timer tasks; other tasks such as loading tasks will continue to run unthrottled.
Sounds to me as if this could mean that IO events are not effected. So sites that currently poll for notifications in the background might work around the throttle but using long polling or web socket push instead.
402 comments
[ 3.2 ms ] story [ 351 ms ] threadhttps://groups.google.com/a/chromium.org/d/msg/blink-dev/XRq...
Unless I'm supposed to re-implement tabs within my single page application and then force it to only let one tab run, which I guess is possible but horrible :)
If you have several tabbed views, then you would include tabs in your application.
And yeah tabs in JS are possible and I might go down that route, it'll just be a lot of extra work to replicate a UI that already exists fine.
Opening another tab creates a new bakery, not a view into the same bakery. (This only works if you haven't played before or clear your cookies.)
Edit:
If you really want to keep the same functionality then you would need to bring server communication into the mix. It's possible to either run the simulation server-side, or at least communicate the state between tabs using a server.
If you send an email in one Gmail window and it shows up in the other window, then I would guess it receives a message from the server to update.
Maybe use electron or something?
> It is a pure SPA, you just have the option of opening multiple instances at the same time. Like I can open gmail in two tabs, but it's still an SPA.
Gmail just runs the UI in the browser though, the actual work of processing, receiving and sending mail is not done in a tab. The tabs are just views into the system.
It sounds like you are having one tab as both the client and the server, and separate tabs as clients to that other tab, which is pretty edge case.
As someone else suggested, you could move the processing to the server, but I imagine that's not feasible because then you are centralizing the processing and you're paying for processing, not the people visiting.
The more appropriate way to architect this (to my eyes, so take it for whatever you think it's worth) would be to use JS to manage tabs within the application (which you mentioned elsewhere already). The really simple way to implement this might be to have the JS tabs just contain an iframe to the prior implementation's real separate tab URL (since it already works that way, there's not likely to be any security issues you have to deal with).
but chrome does not like that and is always nagging and trying to trick you into installing the latest versions.
i looks like we will have to package it as electron app.
</sarcasm>
Cost is a real concern for these things. The tradeoff is running things on client or expensive backend or spending ages building a custom, efficient backend.
I prefer Firefox, but since Google broke Google Voice (now Hangouts) plugin for FF users, I've been grudgingly opening a Chrome browser each time I want to make a phone call to US number.
Would it be possible to just declare "Best played in Firefox?" It's a bit gauche, but if a browser's engine has a behavior that isn't really compatible with what you intend to do, that's the browser's fault.
I'd guess there's a lot of shared memory between tabs
Tracking per-process memory usage is one of the most trivial things OS/Pref tools do.
The semantics that each process is sharing 5 HUGEPAGES of heap isn't really important as even if 1 was running alone it uses that much memory.
If you are sharing that much data with executables that you have this problem there is some low hanging fruit for memory optimizations you can do.
Indeed. And in cases where these 3 children have the same parent you look at the ParentMem + 40MB (child binary+individual heaps) to report a better picture.Shared/unshared semantics are not hard. Have you ever read /proc/$PID/maps ? Because it clearly labels what is/isn't shared physically. When you are optimizing for memory usage you rarely look at shared readonly pages as the kernel put them there for you.
Injecting an interpretation before taking a measurement is not sound science or engineering.Measurements inform Interpretation. Not vice versa.
It doesn't really make sense to ask "how much memory is this process using?" Instead, you want to ask questions like "how much memory are all of these processes using?" or "how much memory would be freed if I terminate these processes?" or "how much extra memory will be used if I start another process?"
What's hard is understanding which question you want to ask in any given situation.
This is not a data reporting problem.
This is a data interpretation problem.
A good reporting tool should not be interpreting (or forcing an opinion) on the end user.
You believe this problem is hard because you are forcing an interpretation to exist before you take a measurement. When you should not be interpreting until after measurement. Injecting an interpretation into a measurement process fundamentally changes that measurement.
Measurements inform your interpretation. Not the opposite.
TL;DR You put the cart in front of the horse.
That's what I said. "Defining it is what's hard."
You seem to understand what I'm saying, and agree with me, but insist on arguing for some reason I cannot comprehend.
I stated measuring is literally the simplest thing. You said ah but what you measuring. That isn't dependent on the tools, or OS. So why did you state it was?
Are you just arguing with me because you didn't realize I was somebody else?
As a typical computer user, this is what I care about:
- who the frak is eating all my RAM?
- which processes should I kill to get some memory back?
Whatever the weird sharing things are going on, the memory is ultimately linear. So show me a large rectangle subdivided into sections, each one representing memory associated with a set of processes. One section for "this memory is used by Chrome.exe". One for "this memory is used by Chrome.exe, X.exe and Y.exe". One for "this memory is free".
When I click on a section, it should highlight all the processes that share this memory. When I click on a process, it should highlight all the sections this process uses or shares with others.
This way, I could quickly see who's wasting my RAM and how many processes do I need to kill to get some chunk of memory back.
Exactly, I usually find that chrome is eating a little more than what it's displayed in task manager in windows ;) I have no idea how it can achieve that to be honest. Restarting it seems to bring back the 5-15% missing ram in my case.
People who have extremely unstable/inconsistent experiences with these platforms usually have a rogue extension or some other problem lurking beneath the surface.
Also consider occasionally VACUUMing your browser's DBs, and on Firefox, taking advantage of the profile reset option.
While the OP may not be doing anything "wrong", he is almost definitely doing something unusual, or has deeper issues like malware or malfunctioning hardware.
If the ratio were inverted and most users were experiencing daily crashes from normal use, I would consider myself lucky. That's just not been my experience with Chrome/Firefox.
With 4 GB ram, Chrome will happily give ~2GB to any tab that requests it in a couple of seconds, leaving me with an unresponsive Windows aggressively paging memory to disk, only to give whatever it finds... back to chrome
If a browser tab wants to store 300MB of data in RAM, or wants to throw a shitton of stuff at the DOM, Chrome needs to oblige.
Im affraid tabs taking 2MB(two megabytes for a page with javascript, not 20, not 200, two) like in the good old Opera 12.16 wont come back :(
We may see something similar come out of the Vivaldi project which is headed by folk who led the Opera <= v12 development who know very well what was lost when Opera moved to Chromium based web engine.
Case in point fresh Vivaldi on startup makes 4 connections to Google just to say hi, and will keep sending google delicious pieces of data throughout the day, not to mention hardcoded google DNS in case yours is too slow. How about spamming my local network with chromecast UDP garbage? or enumerating shares on startup? WTF would you even do that?
Ps I use Vivaldi :/.
Personally I still have Opera 12.18 installed on every computer as it still is the most swiss-army-knife browser out there for countless reasons. Most of the webpages can be made to work properly in it by adjusting the site preferences.
One thing I am yet to see any of the new browsers be capable of is complete popup blocking. Opera 12.x excelled at this and a complete blackout of popups is 100% achieveable.
https://archive.fo/3ph1z
> This will break the web.
But apparently blogger requires javascript just to render static content.
I've reverted to a plain-HTML layout.
I use a LOT of tabs, and the best plugin has been The Great Suspender. Highly recommend it for anyone who wants memory & CPU back and keeps many tabs/windows open at once: https://chrome.google.com/webstore/detail/the-great-suspende...
tl;dr - Great suspender is even "more aggressive" than the outlined throttling, as it fully suspends the page and returns all CPU and RAM to you, so it's a great solution for people interested in throttling background tabs.
I hate having more than 6-7 simultaneously open because it gets increasingly harder to keep an overview of what you're doing. The same applies for IDE tabs or windows. Too much of them and finding the right one becomes increasingly hard, and losing the thread more likely.
So I leave them open until the computer can't handle it.
I always close them, most aren't needed for a long time.
But if I need stuff I closed I just hit 'reopen closed tab' a few times.
I typically have 100 or so tabs in Firefox. I did get over 600 once, but that's too many ;-)
My open tabs are kinda like my working memory. I could close them and reopen them as needed, but it is easier to just click a tab then to try to find the thing again. In addition, sometimes the pages I am looking at have dynamic navigation, and closing and reopening the page will require a good deal of navigation to find the section I was looking at. Plus, the overall time to reload the content, where if I just have the tab open there is no download time.
Also, the tab icons help me remember what I was looking at. I will often keep tabs open for what I wanted to read later.
As for read-later, I usually pull them into the bookmarks bar (top level, directly visible) to free up some space.
I'd recommend using one of the extensions instead.
The only bad thing is realizing you have a couple hundred old tabs to go through and delete. They really add up over time.
If I want to add a new tab instead of finding the old I can press shift (IIRC).
In addition, you have to take the time for the page to load, you have to delete the bookmark later if you dont want to clutter up your bookmarks, etc.
On the other hand I rather use native apps, when given the option.
Which I also only keep the ones for the task at hand open.
I'm more of a less is more guy, when it comes to windows/tabs.
I use many tabs as a stack of pages when debugging, researching, or reading aggregate news feeds (reddit, hn). It usually starts with a Google search or two, in which I open all links I think _might_ be relevant based off of what information google can provide me from the results page.
From there I read through each and open any further tabs if anything is linked too in the text (I hardly ever actually click navigate, it's most always a new tab). Generally this only goes about 3 deep (search, first page, sub links). I will close any pages that I find have no useful information, but if there is anything I think might be useful in the next 30 minutes I just leave it open. I do this for each of the results I originally opened. Somewhere in the 7-15 tabs generally is the answer I'm looking for or at least there is enough information I can answer my question. If any link is particularly beneficial, I will bookmark it. Generally the time span I have a large number of tabs open is no more than an hour before I'm finished and close everything out.
Chrome handles this nicely, if you are on a page and open a tab, it will place the new tab next to the current tab, instead of at the end of the tab list. Some sort of tree tab view would probably work much better for this, but Chromes behavior isn't bad for what I do.
What I'd really like, though, is a 'close all descendant tabs' option.
I don't use favorites or bookmarks because usually I don't need a link permanently.
Edit: I actively try not to get too many. If it starts to hide the title/favicon completely I start to close them again until I can recognize them by title without clicking through them.
Firefox tried using ... I forget what they called it and renamed it to ... some kind of grouping of tabs. But I think there would be an opportunity for some smart grouping by, e.g., time, i.e., tabs opened within certain periods of time are somehow visually grouped, or type, i.e., using some google foo to classify the URL to differentiate between things like food, news, dev/coding, scientific related tabs.
I'm just saying, it is annoying and boring as hell looking at dozens of tabs that are all gray because they are so contracted. There needs to be a better UI solution.
I use my tabs like a generational garbage collector. Tabs to the left of the current tab are processed, tabs on the right are to-be-processed. I'll go to a page like reddit or HN and spin off a dozen tabs of things to read. Then I'll go through one by one and either process, delay or close.
Once I reach about 250 - 300 tabs, I'll do a longer generation sweep and go through all the tabs and try to get it down to less than 100 or so.
Basically, I'm never in need of finding any specific tab. If I want the content from that tab, I'll just open a new one and navigate back to that point. The tabs are really a lightweight to-read list.
Why do you need an overview? It's like stack frames: you can limit your scope to what you're currently doing. The other tabs represent stuff that's "parked" and you aspire to come back to.
(This is why tabs are better than windows for this, because they maintain a linear order while most systems will re-order window order if you visit the windows)
My tab-opening habits predate tabs, because I was raised on Netscape Navigator with a modem using "open in new window" instead. I would read down a page and open interesting-looking hyperlinks in the background, so I didn't have to wait for them to load. Another advantage of this technique on modems was that I could close down the line and carry on reading.
Incidentally, the note papers floating around on my desk works in a similar way, although they are more of an unordered set. Only one or two are relevant, the rest were helpful at some point but no longer are. Cleaning my table usually results in me dumping the whole thing in the dustbin.
Leave open the tabs you know you'll need soon(ish) and let the Great Suspender throttle them, and save (then close) groups of tabs/windows you won't need right away using Session Buddy.
https://chrome.google.com/webstore/detail/session-buddy/edac...
"""
Advantages over The Great Suspender:
- More memory savings
- Compatible with chrome tab syncing
- Super lightweight extension that uses no content scripts or persistent background scripts
Disadvantages over The Great Suspender:
- No visibility on which tabs have been suspended
- Unable to prevent a tab from reloading when it gains focus
"""
I have a webaudio side project that works nicely even on the background using serviceWorkers for timing. I'm hoping it will be the same on 56.
They work fine in latest Chrome and kinda work in Firefox. But Edge and mobile browsers? Not a chance.
I'm curious because I have a HTML5 audio web app that works great, except when running on mobile in the background.
When the setInterval was in the main code it would slow down, a lot, when the tab was on background. That made the generated music go slow aswell. With the serviceWorker the clock is rock solid, even when the background app can't keep up, the timing is solid.
So it may work for some cases, but not for all.
[1]: https://www.w3.org/TR/service-workers/#service-worker-lifeti...
Better IMO to bury the choice deep in settings or something, for power users, if you even offer the choice at all.
Sounds like you could kill two birds with one stone: allow a non-lame web and encourage users to learn what that means. We can't complain about tech illiterate users with one corner of the mouth and then make them decide what goes with the other.
> if you add more text to explain it, most users will not read it
They're not users. They're the blight on the back of users. Why cater to them? Is someone who looks left and right before crossing the street a "power pedestrian", too?
"This tab wants to use a lot of [RAM/CPU/GPU] while it is in the background, is that cool with you?
If you don't know what this means, it's best to select no. Fuck that site anyway for using a lot of resources without making it obvious that it's doing something heavy, or asking first, or explaining what is going on. If they don't like users clicking no or even navigating away from the page, that's their problem. If you read this far, click here to claim your Avid Reader Achievement Trophy."
Not bad for a first draft?
actually they are about 90%+ of users
https://www.nngroup.com/articles/computer-skill-levels/
edit: Usage implies intentionality. Intentionality implies awareness. Not being some super guru, but more awareness than "is text, won't read". Therefore, while the drive to shovel hardware on people, to create needs you then get to fill, did indeed bring all sorts of people who now get called users to the table, I don't consider them such. It's like someone who has a seizure on dance floor is not dancing, or like someone you forced to be somewhere is not "visiting that place". And I know people don't find it rude to just ignore a claim of how something ought to be with "but this is how it is, which is why it can and must be that way", which is why I say what I say. If someone does bad things and won't discuss them, it's absolutely up to the people who are aware and care to act. If you don't understand poetic language unless it's flowery that's your problem. So yes, I stand by what I said, just not by what it might evoke in the minds of some readers.
1. a tab exceeds its quota and throttling kicks in;
2. you visit the tab to check why it stopped working;
3. you get a permission pop up (like all others) once you visit the tab again, asking you whether you want to allow it unlimited resource usage, noting that it'll decrease battery life of your device.
www.foobar.com wants to:
"Run in the background unthrottled"
I'm not sure if that's a good thing or a bad thing. After all, backward compatibility is how we got the semantics of an alert() dialog stopping all JS execution.
request for location doesn't require the page to explicitly indicate a desire, the request is triggered if the page attempts to use the location services of the JS API. sites that want to run unthrottled can't be identified simply by the usage of a certain API, so the developer would need to add something explicitly to their markup to indicate the desire.
i want control over the feature regardless of whether or not the site's developer deems it appropriate.
"Don't throttle pinned tabs"
You can see the discussion back and forth, here: https://groups.google.com/a/chromium.org/forum/#!topic/blink...
I can see where that will end up though. Everyone who's app was broken by this change will start playing zero volume audio, then the exception will be yanked back.
With the web poised to be the new platform for applications, there really needs to be some more thought put into how to accomplish that goal. The chrome devs already sunset some solutions in that space, like the HTML5 app cache. Now this. Nobody likes a constantly moving target.
What do I know though? I don't normally listen to audio on the web...
On the other hand, if they are using Pandora or similar, the end user probably wants the background tab playing and doing other work (showing current album cover art or whatever so it's there if you switch back to that tab).
https://chrome.google.com/webstore/detail/tab-pinner-keyboar...
I have an option set in FF's about:config that disables loading of my pinned tabs on startup, so I regularly keep 200-300 tabs open and only activate the ones I need.
Sometimes it takes weeks to clear my tabs because I barely see a performance hit from having so many open.
Extending that functionality to throttling seems natural to me.
I swear to god if I see anything mentioning a battery on a desktop machine with no battery...
All I know is that my desktop runs at about 70W idle vs. 450W fully-loaded. Unnecessary use of the CPU wastes money regardless of whether or not you're using that money to charge a battery.
IIRC, most of the browsers are going to do away with this functionality soon, however.
This seems like a step towards the way things work with mobile apps currently, where the app's main thread gets suspended when its not in the foreground, and background processing happens in separate threads which the user has some degree of control over.
Edit: I meant regular `Worker`s, not `ServiceWorker`s.
[1]: https://developer.mozilla.org/en-US/docs/Web/API/Worker
... which may actually be the right solution.
I still want to throttle (or suspend) background tabs, because the laptop gets uncomfortably hot otherwise.
I just can't imagine tons of games that are out there working nicely. New release is estimated to land on 31 January[0], how the hell are people supposed to update their codebases?
[0]: https://www.chromium.org/developers/calendar
Background tabs usually do not have a visible impact for user (tabs with audio are always considered foregrounded).
Say you use up 150ms of CPU time. Chrome isn't going to let another timer fire for 15s. Then, you're late on a whole bunch of work that needs to get done, so the next timer takes 500ms. Chrome then throttles the next timer by 50s. And so on and so forth...
How is this different?
After a timer has executed, its run time is subtracted from the budget.
The budget regenerates with time (at rate of 0.01 seconds per second).
I think that would imply that if in any given second, your timer code runs for <= 10 milliseconds, then you will never run out of budget. Right?
So for things like sending out heartbeat packets to keep connections alive, I'm assuming that doesn't count, because it happens asynchronously (waiting for the response, I mean)? If that's the case, and your 10 milliseconds only applies to running JavaScript on the CPU, then 10 milliseconds seems reasonable to me. It's a background tab, after all, it's disrespectful of your users to abuse their CPU more than that.
And just let us allow tabs to grab all the resources they want on a opt-in basis. Why not?
* Before anyone brings up the inevitable economic argument - it wouldn't take a lot of man hours to do these things, I dare say it would just take one or two persons who are capable to be willing and allowed to do them. And compared to all sorts of things that browsers vendors made and get scrapped, you at least know tabs will always use ram, CPU and load assets over the network, so it's not ever going to be completely useless.
And to repeat myself, I really do miss something akin to the icon that displays which tabs are playing sound -- not for myself, but because it would allow people to notice the difference between bloated and well crafted pages more easily.
I appreciate they prefer to automatically decide what is best, but I would prefer more gauges, at least as an accessible option. If you hide something behind an "advanced" label, it will just scare people off for no reason. It's not like configurations dialog aren't kinda barren and padded as is. Just fix that and then just put things there, neatly categorized and maybe even searchable, and explain them. People can drive cars and vote for politicians, but we can't trust them to read? Just about any image viewer or video player seems to think more highly of people than browsers of all things do.
Besides directly providing information that is relevant to a typical user, I'd hope such a solution would finally put some pressure on the companies to optimize their webpages.
Starting in KitKat, a batching mechanism was introduced, so that apps which declared that they wanted CPU or screen resources in the future didn't all have separate timers running, but instead became members of a class that wanted similar things.
One of the most effective features of Greenify, a battery-saving app, is to force all apps (or all apps minus a few that you designate) into the batching mechanism.
[1] https://groups.google.com/a/chromium.org/forum/#!msg/blink-d... [2] https://support.google.com/chrome/answer/1184722?hl=en
If this were implemented then finally I could open 120 tabs in a window for a detailed query (and they're not all loaded, there's zero overhead), then after 11 minutes of reading a few of those tabs, closing the ones I've read and having others load in their place if they weren't already loaded, be left with 87 unopened tabs with which I could close, since I've learned everything there is to know about that subject and I don't feel the need to read the rest anymore: I feel I've found the answer.
As it stands I can become an expert in any subject accessible in a day or two, in twenty minutes - unless, as sometimes happens, Chrome gets in my way. I can do it by opening them in background tabs today - but Chrome will just shit itself after a while because it's stupid and feels the need to open a 99th background tab actively just because I may want to read it in a bit. Come on.
Also there needs to be a way (not necessarily the default way) to open private (incognito) windows opened privately "Except for crashes" meaning that it's open until I close it, by clicking the fucking X button, not whenever Chrome decides to barf all over itself (crash) - which usually happens when it's done using all my memory. If you fundamentally disagree that there is a distinction between the user actively exiting and you crashing unexpectedly, then why not change the text to "Pages you view in incognito tabs won’t stick around in your browser’s history, cookie store, or search history after you’ve closed all of your incognito tabs or Chrome crashes unexpectedly".
Doesn't make much sense does it -- So please make the functionality match what you just promised, and keep pages open until I've closed them. Not you.
This stuff would improve people's experiences drastically. It's too bad Chrome's developers don't care about getting Google more clicks, more traffic, letting people open more ads from Google search results, and so forth - by letting people keep more pages and searches open or queued for opening. And that they don't care about their users and give them what they've just promised. Instead, in Incognito windows especially, this stuff just disappears whenever Chrome decides to crash -- which is often, given that it feels like aggressively eating memory for any tab anyone might want to follow.
The web is about links. I hope Chrome will start letting people follow more of them and not lose their trail if they don't want to keep it in their history.
-
[1] Functionality. Right-click a link, click "enqueue", this should be the same as "open in background tab" except the tab is added with the URL in it and it is not loaded until you actually make the tab active. Right-clicking the tab bar should give you the option (in addition to normal options) "Close all enqueued tabs", leaving just ones you've already opened. Example usage: say I'm searching for an article. I can start by doing some obvious Google searches in a few different tabs. I can go through the results and enqueue each one. Then I can go through the first (when it becomes the active tab, it is loaded) and enqueue any links that might lead to what I want. Then I close the now full-fledged tab when I'm done reading and following links, the next tab becomes active (which might have been an enqueued tab in which case it becomes loaded for the fi...
Whether this implementation affects just timer callbacks or all background processing (eg websocket data events) is a bit ambiguous - this blog post seems to suggest major apps like Slack and Discord will break, but surely they are using websockets and not continuously polling for new data.
The dev team also acknowledges this is a breaking change for the web and considers it an "intervention" according to [3]. This admittedly doesn't mean much, but at least gives some basic standard of procedure that sites can follow to keep impact on a minimum.
Also noteable is this bit from the current discussion: We mitigate this by only throttling timer tasks; other tasks such as loading tasks will continue to run unthrottled.
Sounds to me as if this could mean that IO events are not effected. So sites that currently poll for notifications in the background might work around the throttle but using long polling or web socket push instead.
[1] https://groups.google.com/a/chromium.org/forum/#!topic/blink...
[2] https://docs.google.com/document/d/1vCUeGfr2xzZ67SFt2yZjNeaI...