Avoid infinity scrolling.
On desktop, use a combination of lazy loading and a “Load More” button. Show about 10-30 products on page load, and then lazy-load another 10-30 products as they scroll down, until they reach 50-100 products. Then, display a “Load more” button and repeat.
On mobile, show 15-30 on page load, then show a “Load More” button. When the user clicks on it, load the next 15-30 elements all at once (no lazy loading).