My Firefox usage has always been a bit excessive. I used to open windows to group my different tasks. Then Panorama came along and I started using groups. Then I had too many groups so I started opening new windows. Luckily I set max_concurrent_tabs to 0 so I avoid loading all of those pages at startup (it’s that BarTab-like thing).

simple tab stats

My curiosity got the better of me so I wrote a little script to tell me some facts about my usage. There are extensions that do some or all of this, but I didn’t actually want to install anything, I just wanted a quick snapshot of what was up. (That said I might turn it into an about:something sort of extension.) You can see what it tells you - it’s not much but it told me what I wanted to know. My usage was higher earlier today, and I’m sure there are people who are much more abusive of Firefox, so no judging.

/* Run this in your error console */
var wc=0, tc=0, tgc=0;
var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/DownloadUtils.jsm");
var wm = Services.wm;
var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
var e = wm.getEnumerator("navigator:browser");
var uc = { };
while (e.hasMoreElements()) {
var win = e.getNext();
var tabs = win.gBrowser.tabs;
wc+=1;
tc += tabs.length;
var gd = ss.getWindowValue(win, "tabview-group");
tgc += gd ? Object.keys(JSON.parse(gd)).length : 1;
Array.forEach(tabs, function(t) {
var url = t.linkedBrowser.currentURI.spec;
if (!(url in uc)) {
uc[url] = 0;
}
uc[url]++;
});
}
var ssFile = Services.dirsvc.get("ProfD", Ci.nsILocalFile);
ssFile.append("sessionstore.js");
var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
stream.init(ssFile, 0x01, 0, 0);
var cvstream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
var fs = stream.available();
var s = "Open windows: " + wc +
"\nOpen tabs: " + tc +
"\nTab Groups: " + tgc +
"\nsessionstore.js file size: " + DownloadUtils.convertByteUnits(fs).join("");
var s2 = "";
for ([u,c] in Iterator(uc)) {
if (c > 1) {
s2 += " " + c + " - " + u + "\n";
}
}
if (s2) {
s += "\nDuplicated urls:\n" + s2;
}
s;
view raw run-this.js hosted with ❤ by GitHub

Judging me on coding style? I would be. I started writing this in the error console, so I left out whitespace and used shitty variable names. Then it grew up and got all awkward.