I can't offer an estimate, but frames are fairly high on the priority list, since it's just about the only significant capability of Classic VPython that is missing from GlowScript VPython.
After mentioning "visible" I saw that you made the virtual objects effectively invisible by setting opacity to zero. Using "visible" is a better choice, for two reasons. One is that an object with zero opacity will still be rendered, though uselessly, whereas objects with visible set to False don't take up any render time. Also, when the scene has any transparent objects, all rendering is slowed down due to the complex procedures involved, and "antialiasing" is necessarily turned off, which means that edges of objects are slightly jagged. See