I'm pretty sure that you're running into fillrate-problems because of the massive overdraw. If you make the area of the triangles much smaller, e.g. like this (note the multiply by 0.1)
addTriangle_() {
var vertices = [];
for (var i = 0; i < 6; i++) {
vertices.push(0.1 * Math.random());
}
...I can go up to 100k triangles still at 60fps, only when I go to 1 million the framerate suddenly breaks down to 9fps (but this looks like a different problem).
In general, even modern graphics cards don't have enough fillrate to render each pixel many thousand times per frame (Retina MacBooks and other HighDPI notebook with weak Intel GPUs barely have enough oomph to render each pixel just once at Retina resolution). You'll have to manually help to prevent that overdraw, by reducing depth-complexity of your scene, draw from front to back (GPUs can fairly efficiently discard triangles that would be completely depth-culled, google for 'hierarchical depth buffer') or other occlusion culling techniques.
Cheers,
-Floh.