¿De cuántos iconos estamos hablando? 20, 200, 2000?
Porque depende mucho orden de magnitud.
En realidad hay varias técnicas que puedes llevar a cabo. La más antigua sería crear los iconos en un sprite que permite colocar todos los iconos en una gran imagen que puedes optimizar bastante.
Luego, usar SVG puede ayudar, porque hace que los iconos sean muy ligeros. Puedes crear un empaquetado de los svg de diversas maneras, desde un archivo CSS, hasta con un web component que cargarías con Javascript.
Si estamos hablando ya de miles de imágenes, entonces requiere una carga perezosa, con Javascript, que debe de ser lo que hacen en la página que nos muestras. Solamente se muestran las imágenes que están visibles en la página en un momento dado y las que no, simplemente no se cargan todavía. Es posible con Javascript saber cuándo se están viendo los elementos de la página para cargar o no las imágenes. Mira, en este código https://vanillajstoolkit.com/helpers/isinviewport/ ejemplo sobre cómo conseguirlo.
Pero lo más nuevo es el lazy loading nativo de imágenes que te lo aporta el navegador directamente, que no hace ni falta escribir Javascript, aunque solo funcionaría en navegadores modernos. Se consigue simplemente con el atributo loading="lazy" en las imágenes.
<img src="icono.png" loading="lazy">