The GPU needs to have the resources (images) available in its memory to render them. The browser ensures that no matter how many images you have they are always available to render . The problem is that when the memory requirement for the images exceeds the RAM capacity of the GPU the browser will swap the images in as needed. The interface between the computer's RAM and the GPU's is very slow in comparison to the GPU's internal speed, also while it's waiting for the new data it can not render those images.
The result is that when you reach the GPU memory limit there is a dramatic reduction in performance. There is not much that you can do to fix this apart from using smaller images.
You also have to consider that different devices have differing amounts of RAM available to the GPU so the images should be a size that will fit the lowest common GPU RAM capacity.
There is no way to query the GPU directly and discover its set up from the browser. It is possible to discover it approximately by testing frame rates while increasing the image count. When the frame rate suddenly drops you know you have found the max memory for that device. You can then resize your images to fit that limit. Unfortunately this is not very user friendly.
But I personally believe there is always a solution. The user can never see more pixels than are available on the screen. If you are rendering with images that exceed the GPU RAM capacity you must be losing many pixels during the rendering due to scaling, clipping, z-buffering, and what not.
Look carefully at what you are rendering. If you are down scaling during the render then do that to the image when you load it.
If you are clipping lots of pixels out, then clip the image at load time. Or if you are only displaying a small part of a large image, consider making a second image with only what is needed, then render that. The larger image can stay in the computers RAM while the GPU only handles the smaller part of the image.
If many pixels are obstructed by other images that render on top then consider reducing the resolution of the obsured pixels.
A careful examination of your scene with these things in mind will bring your frame rate back up. It may increase the complexity of the code, but is a small price to pay for a smooth user experience.