code: function _loop() {
      var k,
          o,
          l,
          job,
          time,
          deadJob;
  
      // Deal with the newly added jobs (the _jobs object):
      for (k in _jobs) {
        job = _jobs[k];
  
        if (job.after)
          _waitingJobs[k] = job;
        else
          _activateJob(job);
  
        delete _jobs[k];
      }
  
      // Set the _isRunning flag to false if there are no running job:
      _isRunning = !!_sortedByPriorityJobs.length;
  
      // Deal with the running jobs (the _runningJobs object):
      while (
        _sortedByPriorityJobs.length &&
        __dateNow() - _lastFrameTime < _parameters.frameDuration
      ) {
        deadJob = _executeFirstJob();
  
        // Deal with the case where the job has ended:
        if (deadJob) {
          _killJob(deadJob.id);
  
          // Check for waiting jobs:
          for (k in _waitingJobs)
            if (_waitingJobs[k].after === deadJob.id) {
              _activateJob(_waitingJobs[k]);
              delete _waitingJobs[k];
            }
        }
      }
  
      // Check if conrad still has jobs to deal with, and kill it if not:
      if (_isRunning) {
        // Update the _lastFrameTime:
        _lastFrameTime = __dateNow();
  
        _dispatch('enterFrame');
        setTimeout(_loop, 0);
      } else
        _dispatch('stop');
    }
docs: The main loop of conrad.js:
  . It executes job such that they all occupate the same processing time.
  . It stops jobs that do not need to be executed anymore.
  . It triggers callbacks when it is relevant.
  . It starts waiting jobs when they need to be started.
  . It injects frames to keep a constant frapes per second ratio.
  . It stops itself when there are no more jobs to execute.