This allows the same SHA to have different builds on different branches, each
separately viewable. This is useful for expressing a "pipeline" in terms of
branches, e.g. a commit starts on branch A and progress through B and C to
master, with the build script switching on branch name.
Previously viewing each build would arbitrarily choose which branch's commit
to show.
In builds with lots of output, trying to reload the page partway
through the build results in thousands of websocket messages (one
per line) that each update the DOM. This can cause the browser to
freeze. Instead, use requestAnimation frame to delay the DOM
updates.