cretz / doogie

A Chromium-based web browser with tree-style pages
https://cretz.github.io/doogie
MIT License
279 stars 28 forks source link

Idea for "chains" or "streams" of browsing #43

Closed alphapapa closed 7 years ago

alphapapa commented 7 years ago

I have had a vague idea of an improvement upon the traditional browser history model for a little while, and when I came across doogie a moment ago from the HN link you posted, and saw how you implemented workspaces and page suspension, I thought about it some more, and I thought you might find the idea useful in your project. Let me see if I can describe it clearly.

There are a few problems with the current browser history/session/tab model of browsing:

In real life, when reading a book or magazine, etc, if I want to stop reading it and come back to it later, I can mark my place and set it down. The human ability for spatial memory and navigation makes it natural (for some people, at least) to find it again later. In the meantime, to the extent I have physical room, it doesn't occupy resources.

In a browser, if I want to stop reading a page and come back to it later, I can bookmark the page, but that a) doesn't keep my place within the page, and b) doesn't keep the history associated with that browsing session, which is often valuable, as a session of browsing that follows links from one page to another may reach some dead ends which I may want to backtrack from. I can also close the tab and try to find it with history search at a later time, but that's not very efficient, and doesn't generally preserve the history (unless I'm willing to continue digging through the history to find every previous page). A third option is to leave the tab open, which preserves my place on the page and the history, but this means the tab continues to take up resources (which with some browsers, like Chrome, results in enormous memory usage).

So what I'd like to be able to do is close the tab, freeing up resources, but preserving the ability to pick up where I left off in that browsing session. That way, if I had been, say, browsing Wikipedia articles about World War II, following links here and there, backtracking to earlier pages, following one subtopic to another, I could come back to my earlier session and resume where I left off. Or if I had been searching Google about a particular topic, having to dig into several pages of search results, I wouldn't have to start that process from the beginning.

So I would like to propose a slightly different model of browsing. I'll call it, for now, "chains." Basically, it would work like this: when you close a tab, the tab's entire history is stored in the browser history. The browser history dialog then has a "chains" view that displays not just pages visited but "chains", which can be expanded, tree-style, to show their history. The user can then reopen a "chain" from any point in its history tree.

Chains should also be bookmarkable, with tags and comments, so that users can store ones that they know they want to resume later, rather than having to dig them out of the history.

It might not be so much to implement, because it would basically work like a browser's existing session-store functionality. e.g. Firefox's sessionstore.js stores every window, every tab, and every tab's history. If entries in that could be archived, bookmarked, and searched, it would basically be this feature.

I don't know of any browser that does this, so if you were to do it, it might be a unique feature you could tout. :) Thanks for reading.

cretz commented 7 years ago

I appreciate the thoughts. Couple of notes:

In general, you can get close to what you want now with workspaces and what I call "immutable browsing" which is to never just click on a link, but always ctrl+click to make it a new page. You can create a workspace, load up anything you want as deep as you want, and close the workspace which frees all resources. Re-opening the workspace goes back to where you left off (sans scroll position and navigation history because those have downsides/difficulties for dynamic web content).

I do need to document what I consider "immutable browsing" or maybe even make it easier with features (such as an opt-in to make regular clicks always open background children for example). But in general I think you can get what you need with the features that exist. But I am happy to add features that could help. Not sure I want to implement the concept of "chains" (I don't even have history implemented yet). But I do need to make workspaces easier/quicker to create, open, close, and search to facilitate this kind of browsing (what I term "contextual tree serialization" or like a mylyn for web browsers).

alphapapa commented 7 years ago

Thanks for the thoughts.

BTW, if I may: do you have any concerns that Google may deprecate the CEF in the future, similar to how Mozilla dumped XULrunner? I'd hate for your project to have the rug yanked out from under it and all your hard work go to waste.

cretz commented 7 years ago

CEF is not a Google thing, it's maintained by a separate maintainer. That's where the real hard work is. I suppose if his work stopped, I'd shutter this browser or fork CEF myself. I'm not too concerned.

(Closing issue because it's become more of a discussion. Feel free to keep commenting, I'm just taking it off the open issues list.)