Я могу подтвердить, что подход в вопросе достаточен для запуска загрузки и кэширования изображений (если только вы не запретили браузеру делать это через заголовки ответа), по крайней мере, в:
- Chrome 74
- Safari 12
- Firefox 66
- Край 17
Чтобы проверить это, я сделал небольшое веб-приложение с несколькими конечными точками, каждое из которых спит в течение 10 секунд, а затем подает фотографию котенка. Затем я добавил две веб-страницы, одна из которых содержала <script>тег, в котором каждый из котят предварительно загружен с использованием preloadImageфункции из вопроса, а другая - всех котят на странице, используя<img> тегов.
Во всех браузерах, указанных выше, я обнаружил, что если я сначала зашел на страницу предварительного загрузчика, немного подождал, а затем зашел на страницу с <img>тегами, мои котята рендерились мгновенно. Это показывает, что предварительный загрузчик успешно загрузил котят в кеш во всех протестированных браузерах.
Вы можете посмотреть или опробовать приложение, которое я использовал для проверки этого, на https://github.com/ExplodingCabbage/preloadImage-test .
В частности, обратите внимание, что этот метод работает в указанных выше браузерах, даже если количество зацикленных изображений превышает количество параллельных запросов, которые браузер хочет сделать за раз, вопреки тому, что предлагает ответ Робина . Скорость предварительной загрузки ваших изображений, конечно, будет ограничена количеством параллельных запросов, которые браузер желает отправить, но это конечном итоге будет запрашивать каждый URL-адрес изображения, на который вы звоните preloadImage().
imgобъект, например, в массиве в родительской области видимости.