Очень интересно. Кто то бы написал что-то плохое. Но я помню себя так лет 5 назад так что!
по физике php и судя по тому что я вижу html ты отправляешь сразу несколько файлов. а может быть у тебя ещё репитер стоит и ты шлешь больше двух. Но ты делаешь один канал связи и шлешь в порядки очереди эти файлы пока они загрузятся все форма висит. ТАк как php не асинхронный.
1. это не как не решить, просто визуально js показывай что файлы грузятся.
2. Используй ajax и отправляешь при клике в цикле каждый файл отдельно но не ожидая загрузки первого а сразу открываешь несколько соиденений с сервером и грузишь (сокращая время загрузки на 30-60%) просто они идут параллельно. так делают и на майле и яндексе ит д и т п.
2.1. А можно вообще намутить так:
создаешь на сервере ендпоинт допустим pre_upload.php
Повесить евент на input file как только он изменился ты делаешь сразу загрузку асинхронно на сервер вызывая pre_upload.php , pre_upload.php вернет тебе то что ты там настроишь, допустим загрузку во временную папку и возврат эксклюзивное имя файла.
Пока идет загрузка файла ты на фронте делаешь анимацию загрузки и как промис вернул положительным ты в input hidden записываешь имя файла.
тем самым юзер видит что что то происходит и может в форме сразу же выбрать несколько файлов. в момент нажатия загрузить ты по факту ничего не грузишь а тупо отправляешь на file-upload.php массив из имен файлов
там скрипт проверяет папку временной загрузки находит эти файлы и перемещает на постоянное место.
что в итоге мы получаем? Юзер видит какие то либо действия, и в момент нажатия кнопки отправить по факту уже все загружено и складывается впечатление что прошли секунды.
если Юзер передумал грузить какой то либо файл он нажал удалить файл и ты опять удаляешь из временой папки файл.
3. На сервере настрой keep-alive.
4. upload_max_filesize и post_max_size для пыхи
5. gzip
Так же ещё сервисы большие юзают CDN, если понимаешь принцип то тут ясно почему у них кажется что быстрее все грузится.
Удачи в покорении вершин!