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).
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; |
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.