Posso confirmar que a abordagem da pergunta é suficiente para acionar as imagens a serem baixadas e armazenadas em cache (a menos que você tenha proibido o navegador de fazê-lo por meio dos cabeçalhos de resposta) em, pelo menos:
- Chrome 74
- Safari 12
- Firefox 66
- Edge 17
Para testar isso, fiz um pequeno aplicativo da web com vários pontos de extremidade que dormem por 10 segundos antes de servir a foto de um gatinho. Em seguida, adicionei duas páginas da web, uma das quais continha uma <script>tag na qual cada um dos gatinhos é pré-carregado usando a preloadImagefunção da pergunta e a outra inclui todos os gatinhos da página usando <img>tags.
Em todos os navegadores acima, descobri que, se eu visitei a página do pré-carregador primeiro, esperei um pouco e depois fui para a página com as <img>tags, meus gatinhos renderizados instantaneamente. Isso demonstra que o pré-carregador carregou com êxito os gatinhos no cache em todos os navegadores testados.
Você pode ver ou experimentar o aplicativo que usei para testar isso em https://github.com/ExplodingCabbage/preloadImage-test .
Observe, em particular, que essa técnica funciona nos navegadores acima, mesmo que o número de imagens em loop exceda o número de solicitações paralelas que o navegador deseja fazer por vez, ao contrário do que a resposta de Robin sugere. A taxa na qual as imagens de pré-carregamento será, naturalmente, limitado por quantos paralelo solicita o navegador está disposta a enviar, mas irá , eventualmente, solicitar a cada URL da imagem que você chama preloadImage()diante.
imgobjeto, por exemplo, em uma matriz no escopo pai.