Why tab navigation sucks in Chrome, part 2

In my previous post I discussed some of the flaws I found in Chrome’s tab navigation. In this one, I take it a step further and discuss some of the tools and concepts I now take for granted.

Bookmarking Tabs

Originally an afterthought for the TabMonkey extension, I found myself using this far more than expected. It’s pretty simple. On my Macbook, I hit a keyboard shortcut (eg, Cmd-Opt-1) to bookmark a tab a number between 1 and 9, and then another shortcut (Cmd-1) to jump directly to one of those tabs. GMail is tab #1, Beastmode.fm #2, Google Voice #3, and so forth.

Chrome Extension Combo

TabMonkey’s cool on its own, but becomes exponentially more useful in combination with other tab extensions. Here’s what I use.

  • QuickTabs
    QuickTabs provides a shortcut that displays all your tabs in a list, instantly searchable by title and URL. As you type, the list is filtered in real time. You can click on a tab to switch to it, or just hit enter.

    This works particularly well with TabMonkey, as you can quickly jump back to the tab you just came from. Awesome.

    [Full disclosure: I loved Evan Jehu's excellent QuickTabs extension so much I wound up contributing code to it.]

  • Tab To The Next
    This extension mimics Firefox’s behavior — it moves new tabs you open immediately to the right of your current tab, rather than leaving them on the far right.

    I found that this greatly decreases the time I spend jumping around, because when that new tab is closed, you wind up on your previous tab, rather than the far right.

  • TabMonkey
    Allows me to jump to the previously active tab and bookmark tabs, as described above.

And there you have it. Quick tab navigation for Chrome that, IMO, should have been built into its core functionality.

Why tab navigation sucks in Chrome

Grumpy cat hates tab navigation... and lifeI love Chrome, but using Chrome with many tabs open is frustrating. My first response was “Why can’t I get back to the last tab that was active ? Where’s that shortcut ?”

So I built TabMonkey to do just that. It’s now muscle memory for me. But I also learned that I’m not the only one who’s frustrated1, and thought more about the problem.

I realized that one of the main issues is how Chrome and Safari open up new tabs on the far right, no matter where I currently am. This immediately makes me lose track of where I was — I open a new tab, read it, close it and I’m now on some random tab on the far right. With no easy way to get back to where I was, short of clicking around. Now, I’m no UX designer, but that just seems silly.

Silly enough, in fact, that Firefox does it differently. In Firefox 17, the tabs do open on the far right by default, but when you close them, it takes you to the previously active tab. Smart — kudos to the Firefox team.

As an experiment, I wound up installing this Chrome extension which opens all new tabs immediately to the right of the current tab, just like cmd-clicking on a link would do. And the difference is enormous.

I found that I still use my TabMonkey shortcuts, but far less often because I don’t keep losing track of where I was. New tabs open adjacent to where I am, and closing them takes me back to where I was — finally.

In the second part of this post, I’ll discuss the concept of bookmarking tabs that I’ve built into TabMonkey, as well as another excellent Chrome extension I use to increase productivity.

  1. The public is getting rowdy, sire []

TabMonkey: quick Chrome tab navigation

I have 41 tabs open in Chrome right now, and that’s probably towards the low end of my range.

If you ask me, the ability to jump to the previously active tab should be built into Chrome as a core feature. And I’m certainly not the only one who thinks so1.

After searching the Chrome Store and finding a bunch of broken extensions, I decided to write my own. World, I give you TabMonkey.

In addition to providing a last tab shortcut, I included the ability to bookmark tabs and quickly jump to them. And after using TabMonkey for the last two weeks, I have no idea how I got by without it.2

  1. See this thread if you like watching people suffer []
  2. Source code on GitHub if you’re a hacker and want to fork or contribute. []

Redis vs MongoDB memory usage

UPDATE (Jan 11, 2013):  More in-depth technical discussion on the Redis-DB mailing list can be found here. Thanks to Josiah Carlson for his insights.

[Note: This isn't a scientific comparison or even benchmark, just my own experience in a production environment.]

So, Flippity’s been running on a CherryPy / Redis combo for years now, and I just migrated servers to a Linode 768 slice. That’s 768MB of RAM, which isn’t much, so I was a bit concerned when I saw Redis using 150MB for a zipcode-to-geolocation hash whose total size on disk was 22M. Prior to import into redis, the data looked like this:

 US:00501,40.922326:-72.637078
 US:00544,40.922326:-72.637078
 US:00601,18.180103:-66.74947

Post-import, the redis database (.rdb) file also weighed in at 22M, but when loaded into memory blows up to almost 7x its size.

root@flippity:~ # redis-server —version
Redis server version 2.2.12 (00000000:0)

root@flippity:~ # ps aux | grep redis
redis    15127  3.3 19.4 159324 150144 ?       Ss   00:14   2:29 /usr/bin/redis-server

So I installed Mongo and imported the data, with a single index on the zip field. I then issued the following in a mongo shell to load all the data into memory.

> db.zips.find().forEach(function(x) { x; })

Let’s examine the memory footprint.

root@flippity:~ # mongod —version
db version v2.2.0, pdfile version 4.5

root@flippity:~ # ps aux | grep mongo
romy     17431 12.1 11.4 598508 86784 pts/7    Sl+  01:21   0:55 mongod

That’s a pretty significant 42% reduction in resident memory. I suspect memcached would be an even better option, but I have other plans for Mongo so this’ll do. For reference, the server’s running 64-bit Ubuntu 12.04 LTS and there were 816,256 keys.

Redis uses hash tables internally1, so assuming the load factor is reasonable I’m not sure what’s using up all that memory. If enough people care and it hasn’t been answered in the comments, I may do a follow up with some memory profiling.

PS, Linode is fantastic and I’m proud to put my referral link in there. We’ve used it for years now in a multi-server production environment at ShareSquare and I couldn’t be happier with the results.

  1. If you’re interested in the internals, Paul Smith has a pretty excellent write up on the subject []