This plot is very complex one, as each from ProteinData
. If you want to loose some weight I can help with the following tricks.
But even with this I don't think you will be able to put large number of the elements with in one plot.
plot = ProteinData["SERPINA1", "MoleculePlot"];
In order to have an idea how the structure of this data looks you can use this:
(plot // First) /. List[(_?NumericQ) ..] :> Sequence[]
No we know what we can get rid of:
reduced = First @ plot /. {Specularity[___] :> Sequence[],
(VertexNormals -> _) :> Sequence[],
(VertexColors -> _) :> Sequence[],
EdgeForm[__] :> Sequence[],
RGBColor[_, _, _] :> Sequence[],
AbsoluteThickness[_] :> Sequence[]};
To improve performance with 3D plots which include duplicate objects the best way is to use GeometricTransoformation
+ TranslationTransform(for example)
. It is described well in this fenomenal training by Yu-Sung Chang around 28th minute mark.
Graphics3D[{GeometricTransformation[reduced,
Flatten[Table[TranslationTransform[10000. {i, j, k}],
{i, 2}, {j, 2}, {k, 2}]]]}
, Lighting -> None]

I was able to rotate this quite smoothly with an old pc with on board graphics card!
To go even further I tried to delete half of elements in the molecule, maybe it is not what you need but maybe you can use it:
i = 1;
new = reduced /. x : GraphicsComplex[___] :> (++i; If[OddQ@i, x, Sequence[]])
Graphics3D[{GeometricTransformation[new,
Flatten[Table[TranslationTransform[10000. {i, j, k}],
{i, 3}, {j, 3}, {k, 3}]]]
}, Lighting -> None]

27 elements and I'm able to rotate it easily while for this many copies it is not so obvious that they are reduced by half.