Helping with performance issues without debugging the application is always hard. But still here are my two cents:
- If you lowering the resolution (by decreasing the size of the browser window) and you see no performance improvement, then the application is not fragment shader bound.
- 2000 draw calls is still quite a lot. Ideally you have something like 20. I assume the respective CPU overhead kills the performance in your app right now.