Mostly technical post, but might be interesting:
Every now and then, I like to dig into the code and see how I'm doing in terms of performance and where my hotspots are, so I've dug pprof out of the cupboard and done some tests.

Like with the previous benchmarks, I setup bombardier and pointed it at Gosora, but this time I did it while doing a CPU profile with pprof to see where the CPU hotspots are and as you can see, it spat out some largely byzantine results, although it's not that strange when you understand what it all means.
pprof is basically a tool which shows the functions which use up the most CPU time, in the cumulative mode, it also counts the CPU usage of the children of a function towards the parent's total. There is a mode which spits out a pretty diagram, but I can't get that to work, so I'll settle for the command-line interface.
As for fsnotify, it's a library which scans the filesystem for changes and reloads the CSS files, etc. but it really isn't relevant here as it ran far longer than the load test slightly skewing the results and it's really not what I care about here as it's not on a SSD.
As you may or may not know, Go is written in Go (plus assembly), so we usually wind up with some pretty low level functions you normally can never touch popping up here and there
We'll ignore most of that and focus on GenRouter, as that's the generated router which handles each and every request.
As we can see, each request flows from net/http through to my router's ServeHTTP method, and then, it calls routeSwitch, which in turn calls routes.TopicList. routes.TopicList calls GetListByGroup to pull the topic list out of memory and it sends the template system whirring into action.
Both of these actions make up about 50% of the program's CPU time (pretend fsnotify doesn't exist lol). But the times mentioned there are quite curious considering I only ran the load test for ten seconds, something strange is going on here.

If I take a closer look with "list", it would seem that some things are slipping past the memory cache and hitting the database... That doesn't make any sense. I'll have to get to the bottom of that.
The other big problem is the template system which has been a tad on the slow side ever since I added the phrase system, I'll have to write some optimisations to halve the number of template fragments to halve the number of interface method calls.
I'm trying to finish up Nox and to create a quasi-release right now, so I don't want to get too distracted, but I'll see about dealing with these little gremlins as soon as possible as they're dragging the topic list down in contrast to the other routes.
Rapid Loader will also be a big help for bypassing the template system in some cases, although it's impossible to rely on it for every case.