I'm having this problem too and I think I managed to track it down. I started by putting a Game.getUsedCpu() at the top of my main.js and it almost always had a value less than 2, so the reported cpu is actually going into the execution of your scripts. I have a cpu object in the global scope to keep track of cpu usage and a lot of time goes into the require() function it seems. I do most of my require'ing in a module called init, looking like this: cpu.track("init", function() { var modules = [ "string", // *must* be first or catch-block will fail "global", "math", "protoGame", "protoGame", "protoSpawn", "protoCreep", "protoRoom", "protoSource", "protoStructure", "protoRoomPosition" ]; _.each(modules, function(module) { try { cpu.begin(module); require(module)(); cpu.end(module); } catch (ex) { console.log("Exception caught: {0}.Stack: {1}".format(ex, ex.stack)); } }); _.mixin(Room.prototype, brainRoom, { "chain": false }); if (_.isUndefined(Memory.index)) { Memory.index = {}; } }); The output of that looks like this (I stripped away the items that were <2): ``` protoCreep: 10.955753000000001 protoRoom: 6.102737000000001 protoRoom.require: 4.112070000000003 init: 27.029208 protoCreep: 7.1586099999999995 protoRoom: 12.721302000000001 protoRoom.require: 9.670390999999999 init: 28.924640999999998 ``` Most of these files modify the prototypes of various game objects(hence the proto prefix) but I also timed the require calls and as you can see they take up most of the time. To add some more detailed output I decided to time the execution of the modules that are actually being required by adding a begin()/end() call at the top/bottom of the those to time how long it took the VM to evaluate the actual files. The results were as follows: protoRoom: 5.566376000000002 EnergyMap: 0.04861100000000107 B-Q: 0.0905040000000028 C-Q: 0.08399100000000104 Statistics: 0.04209700000000183 protoRoom.require: 3.4115080000000013 init: 22.651317 It would be really nice if all the source files were actually pre-included before our main functions were executed so that the amount of time spent in require() calls would be reduced to a minimum. Any script file that throws a compile error is ignored. And of course, the scripts shouldn't be executed, just precompiled.